XXXX大学XX学院实验报告课程名称:汇编语言学号:姓名:系:专业:年级:指导教师:职称:20xx~20xx学年第一学期实验项目列表序号实验项目名称成绩指导教师1 实验一汇编程序的汇编及运行2 实验二顺序程序设计3 实验三分支循环程序设计4 实验四 DOS功能调用5 实验五子程序设计总平均福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:__ __ 实验设备号:实验时间: 90分钟指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤1、DA1,DA2的偏移量分别为0020 和0026COUNT的值为00082、修改后程序如下:DA TA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DA TA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TA BEING: MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, V AR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程由上图可知有9个错误,进入2.lst查看错误2.ASM(2): error A2009: Symbol not defined: ODH 表示没有定义ODHV AR1 DB 0, 25, ODH, 300 是定义变量V AR1 为字节类型V AR1所指向的地址单元的内容从低到高为0, 25, ODH, 300 这里的ODH应该为16进制数的0DH修改之后再次调试出现错误2.ASM(2): error A2050: Value out of range 表示越界,因为V AR1是被定义为字节变量,而有一个数据是300 明显超出字节范围修改为30之后继续调试2.ASM(3): error A2009: Symbol not defined: A4H 没有定义A4H这个变量V AR2 DB 12H, A4H, 6BH 这里的A4H是作为16进制并不是被定义为变量,但是由于字母开头的16进制数被默认为变量,必须在A4H之前加0.,将其改为0A4H2.ASM(21): error A2009: Symbol not defined: START 没有定义STARTEND START 这里的END应该跟上面的BEING:对应,所以可以把END START改为END BEING2.ASM(9): error A2009: Symbol not defined: DE 没有定义DEASSUME CS: CODE, DE: DATA 这里的意思本为将CODE存入代码段,将DA TA存入数据段,应该将DE改为DS2.ASM(10): error A2105: Expected: instruction or directive 这一句看不懂表示压力很大,百度告诉我是指令助记符输入错误,不过一眼看过去就知道那个BEING后面漏了“:”2.ASM(14): error A2035: Operand must have size 必须指明大小MOV [SI], 0ABH 这一句是立即数存入内存中,当立即数存入内存时必须指明大小让系统开辟空间由于0ABH 可看成是字节所以将这一句加入byte ptr 即MOV byte ptr[SI], 0ABH2.ASM(15): error A2068: Cannot address with segment registerMOV AX, VAR1+2 这句话实际上是把V AR1的地址+2后的内容存入AX ,V AR1+2的内容也是字节类型,占8位而AX寄存器为16位,所以位数不匹配,应该把AX改为AL 或者AH2.ASM(16): error A2052: Improper operand typeMOV [BX], [SI] ,MOV指令不允许源操作数和目标操作数都是内存。
所以我们可以引入一个通用寄存器AX 作为中介,即[SI]->AX->[BX]2.ASM(17): error A2052: Improper operand type 这个问题与上面那个相同也是引入一个寄存器传递内容MOV V AR5+4, V AR4 这些变量实际上就是内存地址修改完毕,完美运行6.实验结果实验一:从上图,可以看出D1,D2的偏移量以及count的值。
实验3:将程序输入masm中运行并无出错。
7. 总结对汇编语言有了进一步的了解,以及汇编语言那些规则的应用。
福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _ 实验设备号:实验时间:指导教师签字:成绩:实验二顺序程序设计1.实验目的和要求1.学习使用DEBUG的命令;2.使用DEBUG命令在数据段中查看程序运行的结果;3.利用DEBUG运行简单的程序段。
2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1)输入程序观察寄存器变化使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。
注意用T命令执行时,CS: IP寄存器的内容MOV AX, 4E20ADD AX, 1416MOV BX, 2000ADD AX, BXMOV BX, AXADD AX, BXMOV AX, 001AMOV BX, 0026ADD AL, BLADD AH, BLADD BH, ALMOV AH, 0ADD AL, BLADD AL, 9C2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。
DSEG SEGMENTMSG1 DB ‘abc’DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXLEA BX, MSG1MOV CX, 3S: MOV AL, [BX]AND AL, 11011111B ;将AL中的ASCII码的第5位置0,;变成大写字母。
MOV [BX], ALINC BXLOOP SMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START3)程序的跟踪执行操作在DOS 下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。
那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(1)在DOS 下输入:DEBUG 文件名.EXE(2)在DEBUG 提示符下输入U 命令(3)可以用T 命令单步执行指令,执行到 MOV AH, 4CH 时结束,也可以用G 命令执行整个程序,输入:G=B 地址(如:G=0000)(4)用D 命令查看程序执行后数据段的变化输入:D K 地址:0 (如:D1260:0)在显示的数据中,对照源程序或LST 文件查看结果所在的偏移地址的内容。
4)编写调试下面的程序,用DEBUG 查看数据段中的结果(1))/()510*)((Y X X W Z ++-=,X ,Y ,W 为字节类型变量,结果存于Z 单元,写出数据段和代码段。
(2)X ,Y 为字节类型数,求16/)2*)(8*)((Y X Y X Z --+=,写出完整的数据段和代码段,不用乘除指令。
4.算法描述及实验步骤1)用记事本输入各段程序,并储存成源程序,保存在MASM 目录下。