预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共175页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四章指令分类与简单的程序段设计 第四章指令分类与简单的程序段设计 4.1传送类指令 4.2算术运算类指令 4.3逻辑运算类指令 4.4移位类指令 4.5程序控制类指令 4.6串处理指令 4.7处理机控制指令 习题四 第四章指令分类与简单的程序段设计 4.1传送类指令 4.1.1数据传送指令 数据传送指令有: MOV(Move)传送指令 PUSH(Pushontothestack)进栈指令 POP(Popfromthestack)出栈指令 XCHG(Exchange)交换指令 XLAT(Translate)换码指令 第四章指令分类与简单的程序段设计 (1)MOV传送指令。 汇编格式:MOVDST,SRC 执行的操作:(DST)←(SRC) 其中,DST表示目的操作数,SRC表示源操作数。 MOV指令传送的数据可以是字或字节,但SRC与DST的宽 度必须一致,即同为字节或同为字。MOV指令的传送方向有着 严格规定,如图4.1所示,从寄存器到寄存器,立即数到寄存 器,立即数到存储单元,存储单元到寄存器,寄存器到存储单 元,寄存器或存储单元到除CS外的段寄存器(注意,立即数不 能直接送段寄存器),段寄存器到寄存器或存储单元。但是 MOV指令的目的操作数不允许用立即数,也不允许用CS寄存 器,而且不允许用MOV指令在两个存储单元之间直接传送,也 不允许在两个段寄存器之间直接传送。MOV指令不影响标志位。 第四章指令分类与简单的程序段设计 立即数 通用寄存器 存储器AX,BX,CX,DX BP,SP,SI,DI CS 段寄存器 DS,ES,SS 图4.1MOV指令的传送方向 第四章指令分类与简单的程序段设计 由图4.1可知,段基址不能直接传送到段寄存器,必须通过 寄存器分两次传送,例如: MOVAX,DATASEG;设DATASEG为某数据段段名 MOVDS,AX;数据段段基值送入DS 存储单元之间也不能直接传送。若ADDR为某16位数据的 段内偏移地址,要把该数据复制到与它相邻的下一个字单元, 则必须通过通用寄存器分两次传送,例如: MOVAX,ADDR;源操作数为直接地址 MOVADDR+2,AX;寄存器送直接地址 第四章指令分类与简单的程序段设计 或者可用下列指令完成: MOVBX,OFFSETADDR;段内偏移地址送入BX MOVAX,[BX];寄存器间接寻址 MOV2[BX],AX 其中,第一条指令把ADDR的偏移地址(而不是内容!)送到 BX寄存器。OFFSET为属性操作符,意为把其后符号的段内偏 移地址(不是内容)作为源操作数。 第四章指令分类与简单的程序段设计 若要实现两个存储单元之间的数据交换,可用下述指令实现: MOVAX,X1;X1为一个存储单元地址,直接地址 MOVBX,Y1;Y1为另一个存储单元地址 MOVX1,BX MOVY1,AX 第四章指令分类与简单的程序段设计 (2)PUSH进栈指令。 汇编格式:PUSHSRC 执行的操作:(SP)←(SP)-2(将SP的内容减2,指向新的栈顶) ((SP)+1和(SP))←(SRC)将SRC的内容压入新的 栈顶,低8位存入(SP)单元,高8位存入(SP)+1 单元) 第四章指令分类与简单的程序段设计 (3)POP出栈指令。 汇编格式:POPDST 执行的操作:(DST)←((SP)+1和(SP))(将栈顶的内容存 入DST的单元,即(SP)中内容存入DST的低8位,(SP)+1中 内容存入DST的高8位) (SP)←(SP)+2(将SP的内容加2,指向新的栈顶) 第四章指令分类与简单的程序段设计 PUSH,POP是两条堆栈操作指令。堆栈是以“后进先出” 方式工作的一个存储区,位于堆栈段中(必须由段寄存器SS指 定)。它只有一个出入口——“栈顶”,由堆栈指针寄存器SP指 示。SP的内容在任何时候都指向当前的栈顶。堆栈是由高地址 向低地址生长的,即进栈操作应使SP内容减小,出栈操作应使 SP内容增加。PUSH和POP指令都必须根据当前SP的内容来确 定进栈或出栈的存储单元,而且必须及时修改指针,以保证SP 指向当前的栈顶。 堆栈的存取必须以字为单位(PC机不允许字节堆栈),所以 PUSH和POP指令只能作字操作。它们可以使用除立即数以外 的其他寻址方式。PUSH指令中的SRC和POP指令中的DST也可 以指定段寄存器作为操作数,但POP指令不允许用CS寄存器。 这两条堆栈指令不影响标志位。 第四章指令分类与简单的程序段设计 例如,设SS内容为4000H,SP内容为1126H,AX内容为 0714H,下列两条指令执行情况如图4.2所示。 PUSHAXPOPBX 执行前 执行后执行后 栈顶