如果您无法下载资料,请参考说明:
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,DXBP,SP,SI,DICS段寄存器DS,ES,SS图4.1MOV指令的传送方向第四章指令分类与简单的程序段设计由图4.1可知,段基址不能直接传送到段寄存器,必须通过寄存器分两次传送,例如:MOVAX,DATASEG;设DATASEG为某数据段段名MOVDS,AX;数据段段基值送入DS存储单元之间也不能直接传送。若ADDR为某16位数据的段内偏移地址,要把该数据复制到与它相邻的下一个字单元,则必须通过通用寄存器分两次传送,例如:MOVAX,ADDR;源操作数为直接地址MOVADDR+2,AX;寄存器送直接地址第四章指令分类与简单的程序段设计或者可用下列指令完成:MOVBX,OFFSETADDR;段内偏移地址送入BXMOVAX,[BX];寄存器间接寻址MOV2[BX],AX其中,第一条指令把ADDR的偏移地址(而不是内容!)送到BX寄存器。OFFSET为属性操作符,意为把其后符号的段内偏移地址(不是内容)作为源操作数。第四章指令分类与简单的程序段设计若要实现两个存储单元之间的数据交换,可用下述指令实现:MOVAX,X1;X1为一个存储单元地址,直接地址MOVBX,Y1;Y1为另一个存储单元地址MOVX1,BXMOVY1,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执行前执行后执行后栈顶