寻址方式与基本指令实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学
(计算机学院)
课内实验报告
实验名称:寻址方式与基本指令实验
专业名称:
班级:
学生姓名:
学号(8位):
指导教师:
实验日期:2020年4月30日
一、实验目的
1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。
2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。
3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法。
二、实验预习要求
1、认真阅读本书第一章,熟悉汇编语言程序设计上机步骤。
2、认真阅读本书附录A,熟悉DEBUG调试工具的使用方法。
3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。
4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。
三、实验内容
1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成
EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。
(1)程序装入后,代码段寄存器CS的内容为____0483____H,代码段第一条可执行指令
MOV AX, DATA对应的机器代码为____0483:0123 8B4702______H,它
是一个____2____字节指令,注意观察执行该指令时IP值的变化情况,
该指令源操作数DATA的寻址方式是____直接寻址______,其值为
_____837F_____。
(2)执行完MOV DS, AX指令后,数据段寄存器DS的内容为____0483____H,源程序在数据段中定义的数据82H、68H和88H被装
入的存储单元的物理地址分别为___048B2_____H、___04898_____H
和____048B8____H。
(3)程序中第一条ADD AL, [BX] 指令对应的机器代码为_____06A2
_____H,它是一个____2____字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为_____寄存器间接寻址_____,该操作数所在存储单元的逻辑地址(DS): (BX)为_____0483:1E88_____,其物理地址为____066B8______H;执行完该指令后(AL)=___0001___H,CF=___0___,OF=___0___,ZF=___1___,SF=___1___,AF=___0___,PF=___0___;若两操作数为无符号数,计算结果是否正确_______?若两操作数为带符号数,计算结果是否正确____是____?若计算结果正确,结果是正数还是负数___是___?(4)执行完第二条ADD AL, [BX] 指令后(AL)=___0002___H,CF=___1___,OF=___1___,ZF=___1___,SF=___0___,AF=___1___,PF=___1___;若两操作数为无符号数,计算结果是否正确___是____?
若两操作数为带符号数,计算结果是否正确____否____?
(5)指令MOV SUM, AL中目的操作数的寻址方式为____寄存器间接寻址______。
该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为____72____H。
DATA S EGMENT
NUM DB 82H, 68H, 88H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET NUM
MOV AL, [BX]
INC BX
ADD AL, [BX]
INC BX
ADD AL, [BX]
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2、读懂下列源程序;编辑、汇编、连接生成EX12.ASM、EX12.OBJ、EX12.LST、
EX12.EXE文件;使用DEBUG单步执行EX12.EXE文件,并回答以下问题。
(1)代码段的前三条指令MOV AX, STACK、MOV SS, AX和MOV SP, LENGTH STL的功能为堆栈初始化,试问执行完这三条指令后,堆栈栈
底所在单元的逻辑地址(SS): (SP)为____0590:040B____;执行PUSH AX指令后堆栈指针寄存器(SP)=___04FE___H,此时,(SS): (SP+1)和
(SS): (SP)单元的值为___0590:040F____H;执行完PUSH BX后
(SP)=___04FE___H,此时,(SS): (SP+1)和(SS): (SP)单元的值为
___0590:0410____H;执行完POP AX后(SP)=__04FE____H;执行完
POP BX后(SP)=___0500___H;此时(AX)=___8CA3___H,
(BX)=___9B0A___H。
请读者通过对堆栈操作指令执行情况的观察,进
一步掌握进、出栈操作过程。
(2)执行ADD AX, BX指令后(AX)=___8802_____H,CF=___0___,OF=___1___,ZF=___1___,SF=___1___,AF=___0___,PF=___0___(注
意考虑PF值与计算结果高8位有无关系);若两操作数为无符号数,
计算结果是否正确___否____?若两操作数为带符号数,计算结果是否
正确____否____?
(3)执行AND AX, BX指令后(AX)=____8802____H,CF=___0___,OF=___0___,ZF=___1___,SF=___0___,AF=___0___,PF=__0____。
STACK SEGMENT stack
STL DW 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AX, STACK
MOV SS, AX
MOV SP, LENGTH STL
;表达式“LENGTH STL”的功能为计算STL中定义的变
量的个数,
;汇编后其值为100H ,详见教材5.1.1
MOV AX, 0101101100001010B
MOV BX, 0100110010100011B
PUSH AX
PUSH BX
ADD AX, BX
POP AX
POP BX
AND AX, BX
MOV AH,4CH
INT 21H
CODE ENDS
END START
3、指出下列指令的错误原因,上机运行,观察汇编程序(MASM.EXE)给出的
出错信息,改正后再上机验证。
(1) MOV BP, BL (2) MOV [BX],[BP]
(3) MOV [BX],20H (4) INC [SI]
(5) ADD AX,[SI+DI] (6) SHL AX,3
(7) PUSH 2000H (8) POP AL
(9) MOV CS,AX (10) MOV DS,1000H (1)错误原因:BP是16位寄存器, BL是8位。
(2)错误原因:原操作数和目的操作数不能同时为存储器。
(3)错误原因:操作数类型不明确。
(4)错误原因:操作数类型不明确。
(5)错误原因:SI和 DI不能同时出现在操作数中。
(6)错误原因:循环次数大于1应间接移位。
(7)错误原因:立即数不能进行堆栈操作。
(8)错误原因:POP不能对字节操作。
(9)错误原因:CS不能作为目的操作数。
(10)错误原因:立即数不能送人数据段。
四、实验过程
1.使用记事本编写源代码,保存为asm为后缀的源程序;
2.运行CMD,打开dos命令,进入汇编环境所在目录;
3.masm 文件名.asm 回车此时目录下生成obj后缀的目标文件。
4.link 文件名,回车,此时目录下生成exe后缀的可执行文件。
工具及生成的目标文件
使用EDIT生成名为.ASM的源程序,汇编生成.OBJ文件和.LST文件,连接生成.EXE文件;用EDIT打开.LST文件,了解.LST文件包含的信息;使用DEBUG 调试工具单步执行.EXE程序
五、实验总结
通过本次实验,我熟悉了80x86寻址方式及基本指令的功能,掌握了汇编语言程序设计上机过程和汇编语言源程序结构。
对实验前做错或做不出来的问题,我通过本次试验操作对这些问题有了进一步的认识,如:操作数的寻址方式。
但还有一些问题尚待解决,这是学习上的不做,这些将会在查阅一些资料后得到解决。