您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页微机实验二 熟悉汇编程序建立及其调试方法

微机实验二 熟悉汇编程序建立及其调试方法

来源:爱go旅游网
微机原理实验报告

实验二 熟悉汇编程序建立及其调试方法

一、实验目的

1.熟悉汇编语言源程序的框架结构,学会编制汇编程序。 2.熟悉汇编语言上机操作的过程,学会汇编程序调试方法。

二、实验内容

1.学习编写汇编语言源程序的方法,了解数据存放格式。 2.阅读给出的程序,找出程序中的错误。

3.通过调试给出的汇编语言源程序,了解并掌握汇编语言程序的建立、汇编、链接、调试、修改和运行等全过程。

三、修改后的程序

STACKSG SEGMENT PARA STACK'STACK' ;定义堆栈段 DB 256 DUP (?) ;堆栈段为256个字节空间, STACKSG ENDS

DATASG SEGMENT PARA 'DATA' ;设置数据段 BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512;定义数据段有20个字的数据 DW 23, 56, 420, 75, 0,-1024,-67,39,-2000 COUNT EQU 20 ;定义计数次数常量COUNT等于20 MAX DW ? ;保留1个字空间,用以存放最大值结果 DATASG ENDS

CODESG SEGMENT ;代码段

ASSUME SS : STACKSG, CS : CODESG ;STACKSG为堆栈段CODESG为代码段 ASSUME DS : DATASG ;DATASG为数据段

ORG 100H ;指令语句的起始偏移量为100H BEGIN: MOV AX, DATASG ;保存最大值结果 MOV DS,AX ;给段寄存器赋值

LEA SI,BLOCK ;将SI设为指向数据的指针

MOV CX,COUNT ;设置循环次数,CX中装入计数初值 DEC CX ;CX循环次数减1

MOV AX,[SI] ;从内存取数到AX

CHKMAX: ADD SI,2 ;取完一次数据,地址偏移量加2

CMP [SI],AX ;数据指针当前所指单元的值与 AX比较 JLE NEXT ;取其中较大者存于AX中 MOV AX,[SI]

NEXT: LOOP CHKMAX ;与数据段最后一个数据比较后跳出循环 MOV MAX,AX ;保存最大值到MAX MOV AH,4CH ;退出程序 INT 21H CODESG ENDS

END BEGIN

程序的功能:输入20个数,比较出数值最大的一个数。

四、实验步骤

1. 建立汇编语言源程序,对所建立的汇编语言源程序进行编译、链接。

2. 运行DEBUG调试程序,装入被调试程序,用U命令查看调入的程序,用R命令查看

并记录当前寄存器内容。

3. 用D命令查看并记录下内存中数据存放格式。

4. 用T命令但不运行程序,观察个条指令执行结果,以及对寄存器、标志位、内存单元

的影响,若查找出程序中的错误,用Q命令退出DEBUG环境修改汇编语言源程序,重复上述步骤,直至整个程序无误。

5. 若将LEA SI,BLOCK语句换成LEA SI,BLOCK+2*COUNT-2,并将ADD SI,2语句改为

SUB SI,2重新运行程序,观察程序运行结果。

6. 若重新给出一组数据后运行程序应该如何操作。

答:在源程序上直接修改数据后进行编译、链接、再用DEBUG程序查错最后生成EXE文件。

MOV DS,AX

7. 若要求找出数据区中最小数,程序将如何修改,并上机调试。

应将JLE NEXT改为JGE NEXT

五、习题与思考

1. 在装入被调试程序后,如何知道分配给该用户程序的数据段在内存中的位置?

答:在DEBUG调试环境中,通过输入-R指令即可知道数据段在内存中的位置。

2. 数据区以什么形式存放用符号数的?

答:通过转换成补码的形式,来存放有符号数。

3. 修改前、后程序在执行时有何区别(提示:观察数据指针的变化)

答:修改程序前:SI=0000到SI=0002到SI=0004再到SI=0006,是一个逐渐递增的过程。 而在将:LEA SI,BLOCK改成LEA SI,BLOCK+2*COUNT-2,并将ADD SI,2改为SUB SI,2后。SI=0000到SI=0026D到SI=0024再到SI=0022,是一个之间递减的过程

4. 程序执行完毕,结果存放在何处?

答:结果放在内存数据段的变量MAX中(0770:0028)

5. 总结一下CS,IP,SS,DS,ES被设置的区别?

答:CS、SS、DS、ES都是通过伪指令ASSUME来设置成与数据段建立联系。而IP则是通过伪指令ORG来进行设置的。

6. 观察伪指令PARA和ORG的作用

答:PARA表示:本段从1节的边界开始(1节为16字节),即段的起始地址能被16整除(段起始地址的低四位为0)。

ORG表示:定义处于当前段的偏移地址。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务