微机原理实验一报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 寻址方式与基本指令实验
2.1.1 实验目的
1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。
2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计
打好基础。
3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法
2.1.2 实验预习要求
1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。
2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。
3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。
4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行
环境的问题除外),以便在实验时进行验证。
2.1.3 实验内容
1、读懂下面的源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件,用EXIT打开EX11.LST文件,了解.LST 文件包含的信息,使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。
○1程序装入后,代码段寄存器CS的内容为1138H,代码段第一条可执行指令“MOV AX DA TA”对应的机器代码为0000B83711H,它是一个——字节指令,注意观察执行该指令是IP 值的变化情况,该指令源操作数DATA的寻址方式是立即数寻址方式,其值是1137。
○2执行完“MOVDSDA TA”指令后,数据段寄存器DS的内容为1127H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为11270H、11271H和11272H。
○3程序中第一条“ADDAL[BX]”指令对应的机器代码为0008 8A07H,它是一个四字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为寄存器间接寻址方式,该操作数所在的存储单元的逻辑地址(DS):(BX)为1137:0000,其物理地址为11370H,执行完该指令后(AL)=37H,CF=0H,OF=0H,ZF=0H,SF=0H,AF=0H,PF=0H;计算结果正确,结果是负数
○4执行完第二条“ADD AL [BX]”指令后(AL)=82H,CF=0H,OF=0H,ZF=0H,SF=1H,AF=0H,PF=0H;计算结果正确,结果是负数
○5指令“MOV SUM,AL”中,目的操作数的寻址方式为寄存器直接寻址方式。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元值变为00H。
DA TA SEGMENT
NUM DB 82H,68H,88H
SUM DB ?
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA
START: MOV AX,DA TA
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)为:1137:0100;执行“PUSH AX”指令后,堆栈指针寄存器(SP)=0100H,此时,(SS):(SP+1)和(SS):(SP)单元的值为0102 0100H,执行完“POP AX”后,(SP)=——H;执行完“POP BX”后,(SP)=00FEH;,此时(AX)=4CA3H,(BX)=4CA3H。
○2执行“ADD AX ,BX”指令后(AX)=5B0AH,CF=0H,OF=0H,ZF=0H,SF=0H,AF=0H,PF=0H;若两操作数为无符号数,计算结果正确,若两操作数为带符号数,则计算结果不正确
○3执行“AND AX ,BX”指令后(AX)=4CA3H,CF=1H,OF=0H,ZF=0H,SF=1H,AF=0H,PF=0H。
STACK SEGMENT stack
STL DW 100H DUB(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AX, STACK
MOV SS, AX
MOV SP, LENGTH STL
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)给出的出错
信息,改正后再上机验证。
○1MOV BP, BL
○2MOV [BX],[BP] ○3MOV [BX],20H ○4INC [SI]
○5ADD AX,[SI+DI] ○6SHL AX,3
○7PUSH 2000H
○8POP AL
○9MOV CS,AX
○
10MOV DS,1000H
解答:1:错误信息为:End of file,no end directive; Operand types must math
错误原因:BP是16为寄存器,BL是8位
2:错误信息为:End of file,no end directive; Improper Operand type
错误原因:原操作数和目的操作数不能同时为存储器
3:错误信息为:End of file,no end directive; Operand MUST HA VE SIZE 错误原因:操作数类型不明确
4:错误信息为:End of file,no end directive; Operand MUST HA VE SIZE 错误原因:操作数类型不明确
5:错误信息为:End of file,no end directive;MULTIPLE INDEX REGISTERS 错误原因:SI和DI不能同时出现在操作数中
6:错误信息为:End of file,no end directive; Improper Operand type
错误原因:循环次数大于1应间接移位
7:错误信息为:End of file,no end directive; IMMEDIATE MODE ILLEGAL 错误原因:不能对立即数进行堆栈操作
8:错误信息为:End of file,no end directive; ILLEGAL SIZE FOR OPERAND 错误原因:POP不能对字节操作
9:错误信息为:End of file,no end directive; DATA EMITTED WITH NO SEGMENT 错误原因:CS不能作为目的操作数
10:错误信息为:End of file,no end directive; IMMEDIATE MODE ILLEGAL 错误原因:立即数不能送人数据段
2.1.4 实验小结
1.通过本次试验使我进一步加深了对课本内容的理解,进一步理解了汇编语言的执行过程
2.了解汇编语言的编程思想及过程
3.对知识的理解有理论转化成实际的操作及理解
4.通过试验了解到自己对理论的掌握依旧不到位,应该进一步的学习,训练