实验三 数据传送类指令练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:数据传送类指令练习
实验目的:进一步熟悉常用DEBUG命令、数据寻址方式;掌握80x86数据传送类指令的使用方法、汇编语言源程序完整段定义格式。
实验内容:练习数据传送类指令:MOV、PUSH、POP、XCHG、LEA、LDS、LES、XLAT、PUSHF、POPF、LAHF、SAHF,注意观察指令执行结果、弄清指令的功能。
实验步骤:
1、练习MOV传送指令,掌握MOV传送指令的格式:
在代码段中添加以下指令,对源程序汇编检查指令的正误,如果有错误请写出错误原因。
MOV CX, DL (操作数类型不匹配)
MOV CS, DX (CS不能作为目的操做数)
MOV 35H, DX (立即数不能为目的操作数)
MOV CX, [DX] (间接寻址的寄存器只能是BX,SI,DI,BP)
MOV [SP], DX (间接寻址的寄存器只能是BX,SI,DI,BP)
MOV AL, 1234H (操作数类型不匹配)
MOV ES, [DX][SI] (必须是一个基址一个变址)
MOV AX, BX+DI (【BX+DI】)
MOV [SI], [DI] (不能同时为内存操作数)
;[
MOV CX, D X;(操作数类型不匹配)
MOV C X, DX ;(CS不能作为目的操做数)
MOV BYTE PTR[BX],35H ;(立即数不能为目的操作数)
MOV CX, [DI] ;(间接寻址的寄存器只能是BX,SI,DI,BP)
MOV [BP], DX ;(间接寻址的寄存器只能是BX,SI,DI,BP)
MOV A X, 1234H ;(操作数类型不匹配)
MOV ES, [BX][SI] ; (必须是一个基址一个变址)
MOV AX, [BX+DI] ;(【BX+DI】)
MOV [SI], DI ; (不能同时为内存操作数)
]
2、练习PUSH、POP指令的使用方法,参考过程如下:
①在代码段中添加以下指令,汇编连接源程序,用DEBUG调试程序:用U命
令对其反汇编,用T命令逐条执行指令,并记录结果。
MOV AX, 2000H ; (AX)= 2000 , (SP)=__0000___
MOV BX, 3000H ; (BX)= 3000 , (SP)=___0000__
PUSH AX ; (SP)=_____FFFE___, 栈顶单元字内容=_______。
PUSH BX ; (SP)=____FFFC____, 栈顶单元字内容=_______。
POP AX ; (SP)= FFFE , (AX)= 3000 POP BX ; (SP)= 0000 , (BX)= 2000
②分析入栈PUSH指令(-2)、出栈POP指令(+2)执行时SP的变化。
3、练习LEA、LDS、LES指令的使用方法,参考过程如下:
①在数据段中添加以下伪指令,在代码段中添加以下指令,汇编连接源程序,
用DEBUG调试程序:用U命令对其反汇编,用T命令逐条执行指令,并记录结果。
TABLE DB 10H, 20H, 30H, 40H, 50H
ADDR DW 2 DUP(?)
MOV ADDR, OFFSET TABLE
MOV ADDR+2, SEG TABLE
LEA AX, TABLE ;内存操作数的偏移地址为____, AX=_____
LDS AX, ADDR ;内存操作数的物理地址为___,内容为____, AX=___,DS=___ LES AX, ADDR ;内存操作数的物理地址为___,内容为____, AX=___,ES=___
②写出和LEA AX, TABLE等价的传送指令,验证并记录结果。
③总结LDS、LES指令的功能。
4、练习XLAT指令的使用方法,参考过程如下:
①在数据段中添加以下伪指令,在代码段中添加以下指令,汇编连接源程序,
用DEBUG调试程序:用U命令对其反汇编,用T命令逐条执行指令。运行完XLAT指令后,查看并记录BX、AL的值,总结该程序段实现的功能。
TABLE DB ‘012345689’
MOV BX, OFFSET TABLE
MOV AL, 5
XLAT
②利用XLAT指令在AL中得到0-9某个数字的平方值,应该如何修改程序?
运行程序段,验证并记录结果。
5、练习PUSHF、POPF、LAHF、SAHF指令的使用方法,参考过程如下:
①在代码段中添加以下指令,汇编连接源程序,用DEBUG调试程序:用U命
令对其反汇编,用T命令逐条执行指令, 查看并记录堆栈中栈顶字单元中的值以及AX内容的变化。
MOV SP, 100H
PUSHF
POP AX
OR AX, 40H
PUSH AX
POPF
MOV AH, 10H
SAHF
②执行PUSHF指令前,记录标志位的值,执行完指令POPF后,再记录标志位
的值,并和原来的值比较,说明程序功能。执行完SAHF后,记录标志位的值。