第6章 通用寄存器全部进出栈 PUSHA ;顺序将 AX/CXDX/ BX/SP/BP/SIDI压入堆栈 POPA ;顺序从堆栈弹出 DISIBPISPIBXDX/CX/AX (与 PUSHA相反) ;其中应进入SP的值被舍弃,并不进入SP,SP 通过增加16来恢复
第 6 章 通用寄存器全部进出栈 PUSHA ;顺序将AX/CX/DX/BX/SP/BP/SI/DI压入堆栈 POPA ;顺序从堆栈弹出DI/SI/BP/SP/BX/DX/CX/AX (与PUSHA相反) ;其中应进入SP的值被舍弃,并不进入SP,SP 通过增加16来恢复
第6章 符号扩展和零位扩展 MOVSXrl6.r8/m8 把r8/m8符号扩展并传送至r16 MOVSX r32r8/m8/r16/m16 把r8/m8/r16/m16符号扩展并传送至r32 MOVZX r16r8/m8 把r8/m8零位扩展并传送至r16 MOVZX r32 mov bl, 92h 把r8/m8/r16 movsx ax. b axff92h moysx esbl esjfffifff92h movzx edax edi=0000ff92h
第 6 章 符号扩展和零位扩展 MOVSX r16,r8/m8 ;把r8/m8符号扩展并传送至r16 MOVSX r32,r8/m8/r16/m16 ;把r8/m8/r16/m16符号扩展并传送至r32 MOVZX r16,r8/m8 ;把r8/m8零位扩展并传送至r16 MOVZX r32,r8/m8/r16/m16 ;把r8/m8/r16/m16零位扩展并传送至r32 mov bl,92h movsx ax,bl ;ax=ff92h movsx esi,bl ;esi=ffffff92h movzx edi,ax ;edi=0000ff92h
第6章 串输入/输出 INS ;ⅣO串输入 ;存储单元ES:I(ED←ⅣO端口[DX ;(E)DI←(E)DI±1/2/4 OUTs;O串输出 ;IO端口[DX]←存储单元DS:I(E)S ;(E)SI(E)SI士1/2/4 串指令能以双字为传送单位(士4) 心在16位段,采用S、Dl、cX 在32位段,采用 ES ED、EcX
第 6 章 串输入/输出 INS ; I/O串输入 ;存储单元ES:[(E)DI] ← I/O端口[DX] ;(E)DI←(E)DI±1/2/4 OUTS ; I/O串输出 ;I/O端口[DX] ← 存储单元DS:[(E)SI] ;(E)SI←(E)SI±1/2/4 串指令能以双字为传送单位(±4) 在16位段,采用SI、DI、CX 在32位段,采用ESI、EDI、ECX
第6章 条件转移 一转移范围可达到32位全偏移 Jcc label ;c为真,转移到labe指定的段内偏移地址处 少转移范围仍为短转移」 JECXZ label ;ECX=0,转移到abl指定的段内偏移地址处 LOOP/LOOPZ/LOOPNZ label ;循环指令,32位段采用ECX作为计数器
第 6 章 条件转移 Jcc label ;cc为真,转移到label指定的段内偏移地址处 JECXZ label ;ECX=0,转移到label指定的段内偏移地址处 LOOP/LOOPZ/LOOPNZ label ;循环指令,32位段采用ECX作为计数器 转移范围可达到32位全偏移 转移范围仍为短转移
例6.1 ;将Ax的每一位依次重复一次 ;所得的32位结果保存于EAx中 mov ecx 16 mov bx, ax next shr ax 1 rcr edx 1 shr bx 1 rcr edx 1 1。。 p next mov eax, edx
;将AX的每一位依次重复一次 ;所得的32位结果保存于EAX中 mov ecx,16 mov bx,ax next: shr ax,1 rcr edx,1 shr bx,1 rcr edx,1 loop next mov eax,edx 例6.1