实验2建立运行汇编语言程序
实验目的:
1.熟悉8088/8086的数据传送和算术运算指令的书写格式、功能。
2.编写源程序,掌握汇编语言程序格式。
3.掌握汇编、连接、运行汇编程序的全过程;使用DEBUG调试和运行汇编程序。
实验内容:
在硬盘E中建立自己的文件夹,以“班级姓名”命名(比如计科1111张三),实验文件以“实验次数-序号”命名,比如sy2-1.asm。
1、有3个内存单元x,,y z,其中x=1234h,y=0c3f6h,z=10c5h,请编写源程序,计算x+2z-y,结果保存在z单元中,并用debug调试运行查看结果,观察标志位变化。
2、写一个完整的源程序,用DEBUG调试运行,查看运行结果。
DATA SEGMENT;定义数据段DATA
AUGEND DD99251
SUM DD?
DATA ENDS
;请补充语句定义附加段EXTRA,将ADDEND赋值为双精度数-15962
CODE SEGMENT;定义代码段CODE
ASSUME CS:CODE,DS:DATA,ES:EXTRA
START:MOV AX,DAT
MOV DS,AX
;请补充完成给ES赋值的语句,将EXTRA赋值给ES。
;请补充进行加法运算的语句,把数据段DATA中的AUGEND和附加段EXTRA中的ADDEND相加,并把结果存放在DATA的SUM中。
MOV AX,4C00H
INT21H
CODE ENDS
END START
3、完成实验教程第一章的内容。
学习字符串处理指令(课本P75)和DOS显示字符串功能调用(课本P335),理解实验教程例题1.1的程序。
实验报告要求:
1、将程序1的调试运行查看结果的过程截图,并分析标志位值的变化情况。
答:有进位,标志位CF由NC变为CY,与分析结果一致。
源程序:
DATAS SEGMENT
X DW1234H
Y DW0c3f6H
Z DW10C5H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,X
ADD AX,Z
ADD AX,Z
SUB AX,Y
MOV Z,AX
MOV AH,4CH
INT21H
CODES ENDS
END START
2、分析一个完整的汇编语言源程序应由哪些部分组成?
答:汇编语言源程序由语句序列构成,每条语句一般占一行;完整的汇编语言程序由段构成;一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可以随意排列;需要独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点;所有可以执行语句必须位于某一个代码段内,说明性语句可以根据需要位于任一段内;通常,程序还需要一个堆栈段。
源程序:
DATAS SEGMENT
AUGEND DD99251
SUM DD?
DATAS ENDS
EXTRA SEGMENT
ADDEND DD-15962
EXTRA ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:EXTRA START:
MOV AX,DATAS
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV AX,word ptr AUGEND
MOV DX,word ptr AUGEND+2
ADD AX,word ptr ADDEND
ADC DX,word ptr ADDEND+2
MOV word ptr SUM,AX
MOV word ptr SUM+2,DX
MOV AH,4CH
INT21H
CODES ENDS
END START
3、总结汇编源程序从编写到执行的过程。
写出用DEBUG调试并运行可执行文件的过程,
如何查错?如何查看执行结果?
答:
1·汇编源程序从编写到执行的过程可概括为以下三个步骤:编写→编译连接→执行。
①对源程序进行编译连接,使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件——obj文件;
②再用连接程序(LINK.EXE)对目标文件进行连接,生成可在操作系统中直接运行的可执行文件,可执行文件包含两部分内容:程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)相关的描述信息(比如,程序有多大,要占多少内存空间等);
③操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。
2·经汇编连接生成的可执行文件(.EXE文件),可以进入调试程序DEBUG中进行运行、调试,观察运行结果是否正确,操作方法如下:
①带被调试文件启动DEBUG;
②调入文件后,执行:G=0;则程序执行完成并提示Program Terminated normally,
③同时DEBUG将重新设置寄存器和变量等的初始值;
如果要观察程序运行之后的结果,应该执行:G=0,断点地址。
这里的断点地址应该指向程序结束返回DOS之前,也就是如下指令“mov ax,4c00h”和“int 21h”处。
4、分析实验教程例题1.1的程序结构。
答:
1·调用字处理程序wordstar建立sam文件
2·用汇编程序masm或sam对源文件汇编产生目标文件obj
3·用连接程序link产生执行文件exe
4·执行程序。