3.3.1数据传送指令 (1)PUSH与POP:进栈与出栈 语法格式: PUSH regl 6/seg/mem16/ reg32/mem32 POP reg1 6/seg/mem16/ reg32/mem32 操作数不能是CS PUSI Imm 286新增 功能描述 PUSH指令(16位) SP=SP-2 SSSP]=16位操作数 POP指令(16位) 16位操作数=Ss:SP] PUSH指令(32位) SP=SP-4 SSSP]=32位操作数 POP指令(32位) 32位操作数=SS:SP] SP= SP +4 对标志位的影响:无 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3.3.1 数据传送指令 (1)PUSH与POP:进栈与出栈 语法格式: PUSH reg16/seg/mem16/ reg32/mem32 POP reg16/seg/mem16/ reg32/mem32 ; 操作数不能是CS PUSH imm ; 286新增 功能描述: PUSH指令(16位): SP = SP - 2 SS:[SP] = 16位操作数 POP指令(16位): 16位操作数 = SS:[SP] SP = SP + 2 PUSH指令(32位): SP = SP - 4 SS:[SP] = 32位操作数 POP指令(32位): 32位操作数 = SS:[SP] SP = SP + 4 对标志位的影响:无
3.3.1数据传送指令 (2) PUSHF与POPF:标志寄存器进栈和出栈 语法格式: PUSHF FLAGS进栈 POPF 栈顶字出栈到 FLAGS 对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。 【例】设SP=100H,EBX=12345678H,给出下列指令依次执行后的结果。 push ss: [00ffh]=56h, ss: [0Ofeh]=78h, sp=Ofeh pop ax=5678h,sp=100h push ss: [00feh]=1234h, ss: [00fch]=5678h, sp=Ofch pop ax=5678h, sp= ofe pop ax=1234h,sp=100h 【例】交换AX与CX的值。 push push pop 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3.3.1 数据传送指令 (2)PUSHF与POPF:标志寄存器进栈和出栈 语法格式: PUSHF ; FLAGS进栈 POPF ; 栈顶字出栈到FLAGS 对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。 【例】设SP = 100H, EBX = 12345678H,给出下列指令依次执行后的结果。 push bx ; ss:[00ffh] = 56h, ss:[00feh] = 78h, sp = 0feh pop ax ; ax = 5678h, sp = 100h push ebx ; ss:[00feh] = 1234h, ss:[00fch] = 5678h, sp = 0fch pop ax ; ax = 5678h, sp = 0feh pop ax ; ax = 1234h, sp = 100h 【例】交换AX与CX的值。 push ax push cx pop ax pop cx
3.3.1数据传送指令 6.标志寄存器传送指令 (1) LAHF Load AH from Flags 语法格式: LAHF . AH= FLAGS的低8位 对标志位的影响:无 (2)SAHF( Store AH into Flags 语法格式 SAHF. FLAGS的低8位=AH 对标志位的影响:由新装入值确定。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3.3.1 数据传送指令 6. 标志寄存器传送指令 (1)LAHF(Load AH from Flags) 语法格式: LAHF ; AH = FLAGS的低8位 对标志位的影响:无。 (2)SAHF(Store AH into Flags) 语法格式: SAHF ; FLAGS的低8位 = AH 对标志位的影响:由新装入值确定
3.3.1数据传送指令 7.符号扩展与零扩展指令 对标志位的影响:无 (1)CBW、CWD、CWDE与CDQ 语法格式 CBW;A符号扩展为AX CWD;AX符号扩展为32位数DXAX CWDE;AX符号扩展为EAX;386新增 CDQ;EAX符号扩展为64位数 EDXEAX;386新增 【例】设AL=0FEH,给出依次执行下列指令后的结果 cbW ax =offfeh cW dx= Offffh, ax不变,即dax=2 cwae eax=Offfffffeh(-2 edx=0 ffffffffh, eax不变,即edx:eax=2 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3.3.1 数据传送指令 7. 符号扩展与零扩展指令 对标志位的影响:无。 (1)CBW、CWD、CWDE与CDQ 语法格式: CBW ; AL符号扩展为AX CWD ; AX符号扩展为32位数DX:AX CWDE ; AX符号扩展为EAX;386新增 CDQ ; EAX符号扩展为64位数EDX:EAX;386新增 【例】设AL = 0FEH,给出依次执行下列指令后的结果。 cbw ; ax = 0fffeh cwd ; dx = 0ffffh, ax不变,即dx:ax = -2 cwde ; eax = 0fffffffeh(-2) cdq ; edx = 0ffffffffh, eax不变,即edx:eax = -2
3.3.1数据传送指令 (2)MOVSX 一般形式: MOVSX dest,sre;sc符号扩展为dest;386新增 语法格式 MOVSX reg16, reg/mem8 MOVSX reg32, reg/mem8/reg16/mem16 功能描述: MOVSX是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或 32位数,或者将16位数符号扩展为32位数 【例】CBW和CWDE的功能可由MOⅴSⅹ指令实现。 moVsX al;等价于cbw movsx eax,ax;等价于cwde movsx eax,l;等价于顺序执行cbw与cwde 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3.3.1 数据传送指令 (2)MOVSX 一般形式: MOVSX dest, src ; src符号扩展为dest;386新增 语法格式: MOVSX reg16, reg8/mem8 MOVSX reg32, reg8/mem8/reg16/mem16 功能描述:MOVSX是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或 32位数,或者将16位数符号扩展为32位数。 【例】 CBW和CWDE的功能可由MOVSX指令实现。 movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde