汇编语言实验报告综合算术运算的练习(完整的汇编程序源程序)

一、实验目的

  1. 熟悉数据传送、算术运算指令和控制转移指令的用法。
  2. 掌握汇编语言源程序的顺序结构,默认十进制数D。
  3. 掌握汇编语言源程序的逻辑段结构。
  4. 熟悉汇编语言源程序的执行步骤及Debug调试的方法。

二、实验环境

Windows10 DOSBox-0.74  MASM5.0

三、实验内容

用三条指令来实现X+Y-Z,调试并查看执行结果,已知X=0002H,Y=0005H,Z=0005H。

1.分析问题,写出完整的汇编语言源程序。

2.保存此程序文件名为学号的后三位,用汇编语言源程序上机的五个步骤来调试。即用MASM汇编生成目标文件,用LINK进行连接生成可执行文件,并运行程序,接着进入在Debug下调试程序,用-R、-D、-U、-T、-G等命令来分析实验过程和结果。

四、实验步骤与过程分析(描述)

①用记事本编写程序,代码如下图。

用ax表示x、y、z,使用汇编指令mov,add,sub对ax进行具体的赋值进行加减运算。int 21H调用了系统中断,mov ax,4c00h的意思就是调用int 21H的4ch号中断,即安全退出程序。

②编写结束后保存成.asm文件,文件名命名成学号后三位即123.asm

③进入DOS后用masm编译生成.obj目标文件

④用link连接生成.exe可执行文件

⑤运行程序

⑥在debug下调试程序。

-r查看当前各个寄存器内容

-t执行汇编程序,单步跟踪。

指令-t=0 4是从cs:0开始连续执行4条指令,其中执行完第一条指令ax被赋值为0002H,执行完第二条指令ax变为0007H,执行完第三条指令ax变为0002H,即x+y-z=0002H+0005H-0005H=0002H。然后执行第四条指令mov ax,4c00H,即将ax赋值为4c00H。

-g是执行汇编指令,指一次性执行多条指令。

-g=0 c是从cs:0执行到cs:c,其执行结果与-t第四条命令相同。

-p表示结束本次程序,安全退出。

 

 

-d查看当前内存具体内容

如下图可以看到最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ASCII码的形式显示内存值;每行最多显示16个字节的内容。

-u是对机器代码反汇编查看具体指令

-n 123lpm,即将文件名命名为1231pm,再用-w命令存盘。

五、实验总结

此次实验主要用汇编语言源程序上机的五个步骤来调试进行实验。即用MASM汇编生成目标文件,用LINK进行连接生成可执行文件,并运行程序,接着进入在Debug下调试程序,用-R、-D、-U、-T、-G、P、N、W等命令来分析实验过程和结果。此次实验需要注意和思考的几个问题如下:

在编写此程序时,定义数据时应注明进制,这里用16进制表示,比如0002H;因为汇编程序默认的数据是10进制。

G指令主要的作用也是执行汇编指令,不过和T指令不同的是,G指令不是逐条执行,而是一次性多条执行。G命令的使用方法是G [=起始地址] [断点地址],意思是从起始地址开始执行到断点地址。如果不设置断点,则程序一直运行到中止指令才停止。

在Debug下输入程序片段与在汇编语言源程序中是不同的,在Debug下输入程序的数据默认是16进制的,比如mov ax,0002中0002表示的的是0002H,而在汇编语言源程序中必须写为mov ax,0002H,因为汇编程序默认的数据是十进制。

对汇编语言源程序的结构框架分析为:编制汇编语言源程序时,首先要使用段定义伪指令和段寻址伪指令来构造一个由若干指令和数据组成的程序。构造一个源程序的框架结构有如下两种格式。

第一种格式:

ASSUME CS:CODESG

CODESG SEGMENT   ;定义一个段,段名为“CODESG”,这个段从此开始

.......

MOV AX,4C00H     ;返回DOS

INT 21H

CODESG ENDS      ;名为“CODESG”的段到此结束

END              ;标记整个程序的结束

第二种格式:

CODE SEGMENT

MAIN PROC FAR

  ASSUME CS:CODE,DS:DATAREA

START:

......

RET              ;取程序段前缀首地址

MAIN ENDP

CODE ENDS

END START        ;标记整个程序的结束

两种格式的区别:两种格式的本质区别在于返回DOS的方法不同。对于第一种格式,采用了调用DOS系统的4C00H功能,返回DOS。具体方法是:在要返回DOS处,安排如下两条指令:MOVAX,4C00H INT21H; 对于第二种格式,DOS返回方法是调用20H类型的中断服务程序。

猜你喜欢

转载自blog.csdn.net/m0_56267074/article/details/128333853