汇编指令

汇编语言指令集 o&z!6"S<  
一、数据传输指令 !" E-/cc'  
1. 通用数据传送指令. @r<b :?u  
MOV (MOVe) 传送字或字节. 6aY>lkp  
MOVS (MOVe String) 串传送指令 90fs:.  
MOVSX 先符号扩展,再传送. r P'AJDuq  
MOVZX 先零扩展,再传送. tuLH}tkNY  
PUSH 把字压入堆栈. qSTWb%  
POP 把字弹出堆栈. jO8X:j09A  
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. ? %(spV  
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. w"8V0z  
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. -bS)=L  
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. Y: psZ  
BSWAP 交换32位寄存器里字节的顺序 |4mVT&63(  
XCHG (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) Ge V+/^u  
CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) z v O:"w}  
XADD 先交换再累加.( 结果在第一个操作数里 ) dv!r.  
XLAT (TRANSLATE) 字节查表转换. "0Q1qZ  
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL ) 7-* =|gl+  
2. 输入输出端口传送指令. Ew$I/j*  
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) 5iM[sg[y9  
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) pC( sS0J  
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535. 57Z-  
3. 目的地址传送指令. =/3Tv  
LEA (Load Effective Address)装入有效地址. ?*u*de[,  
例: LEA DX,string ;把偏移地址存到DX. L0 NA*C  
LDS (Load DS with pointer)传送目标指针,把指针内容装入DS. W Zn.;  
例: LDS SI,string ;把段地址:偏移地址存到DS:SI. [[+ pMI  
LES (Load ES with pointer)传送目标指针,把指针内容装入ES. '@=PGpRF  
例: LES DI,string ;把段地址:偏移地址存到ES:DI. _[h8P9YI4  
LFS 传送目标指针,把指针内容装入FS. GJA`l8`SQ  
例: LFS DI,string ;把段地址:偏移地址存到FS:DI. sa&) #Z:  
LGS 传送目标指针,把指针内容装入GS. y2|R.EU/m<  
例: LGS DI,string ;把段地址:偏移地址存到GS:DI. %)(Cp-b!  
LSS 传送目标指针,把指针内容装入SS. O7G"sT1Dv  
例: LSS DI,string ;把段地址:偏移地址存到SS:DI. BS 1A p  
4. 标志传送指令. PnYBy| yl  
LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH. 9Ul(GI(  
SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器. ;2xO`[#  
PUSHF (PUSH the Flags)标志入栈. z@ 35NZn  
POPF (POP the Flags)标志出栈. *%5{'  
PUSHD 32位标志入栈. /~p+j{0L3W  
POPD 32位标志出栈. `I tyi}  
~FU@wV^  
二、算术运算指令 {Qu"%h.Al  
─────────────────────────────────────── J @IS/9O  
  ADD 加法. 5*g]qJF  
ADC 带进位加法. }iB|sl2J  
INC 加 1. Ol_q{^  
AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令 l! bv^  
DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令 /b#l^x:j  
SUB (SUBtract)减法. -e GL)M  
SBB (SuVtrach with borrow)带借位减法. h&&6r/4/|  
DEC (DECrement)减 1. }n:?7  
NEC (NEGate)求反(以 0 减之). -_OS%ARa  
CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果). 5Z/7kU= I  
AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令 @D^^_1~  
DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令 oTjyN/?H  
MUL (unsinged MULtiple)无符号乘法. m0w;8uF2UV  
IMUL (sIgned MUL tiple)整数乘法. 7R.Q Ql  
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), PC$CYW5  
AAM 乘法的ASCII码调整. O4 3YY2  
DIV (unsigned DIVide)无符号除法. Dn9w@KO  
IDIV (sIgned DIVide)整数除法. fc=Patg  
以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或 商回送AX,余数回送DX, (字运算). 8M,9kXq{L  
AAD 除法的ASCII码调整. Qhi '') Q  
CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去) N]EcEM#  
CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX中去) -$VZte x  
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) ,C.:;Ime({  
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) >KLtY|o)  
6Tw#^;q-  
三、逻辑运算指令 |s#'dS;  
─────────────────────────────────────── `!:q;i]}  
  AND 与运算. u cwnA  
or 或运算. Sd/?&  
XOR 异或运算. {Sl57!U5  
NOT 取反. t>GfM  
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). J`q]6qf#  
SHL (SHift logical Letf)逻辑左移. QVF]Ci_=  
SAL 算术左移.(=SHL) V@7KsB  
SHR (SHift logical Right)逻辑右移. 5(W"-A}  
SAR 算术右移.(=SHR) !Fw?H3X!"q  
ROL (Rotate Left )循环左移. S-31-Zjw  
ROR (Rotate Right)循环右移. QIN."&qC^  
RCL (Rotate Left through Carry)通过进位的循环左移. HkV1sT  
RCR (Rotate Right through Carry)通过进位的循环右移. 6C>_a*w  
以上八种移位指令,其移位次数可达255次. RT93Mt %P  
移位一次时, 可直接用操作码. 如 SHL AX,1. 2oa#0`{  
移位>1次时, 则由寄存器CL给出移位次数. 1:NrP'W^  
如 MOV CL,04 qQpnLV4  
SHL AX,CL ;!o]wHmA  
/;VhYvEH  
四、串指令 nd;fy$<J/  
─────────────────────────────────────── d=,%= @  
DS:SI 源串段寄存器 :源串变址. w;Q;[:y  
ES:DI 目标串段寄存器:目标串变址. k5kdCC0FCk  
CX 重复次数计数器. Qn ^bVhG+  
AL/AX 扫描值. |AlR^N  
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. Xh J,"=E+  
Z标志 用来控制扫描或比较操作的结束. f84:hXo6  
MOVS 串传送. fzjU<?}  
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) [4fU+D2/d  
CMPS (CoMPare String)串比较. Z%GTnG|rG  
( CMPSB 比较字符. CMPSW 比较字. ) }HE6aF62O  
SCAS (SCAn String)串扫描指令. ;q0uE:^ S  
把AL或AX的内容与目标串作比较,比较结果反映在标志位. Z):n c% S  
LODS 装入串. B?$ "/;&  
把源串中的元素(字或字节)逐一装入AL或AX中. OB ~X/  
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) nm7;ieMfr  
STOS (STOre into String)保存串. IrMl:+t/  
是LODS的逆过程. .To;"D;j,  
REP (REPeat)当CX/ECX<>0时重复. ~2EHOO {  
REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. fC}R4f7C  
REPNE/REPNZ (REPeat while Not Equal/Zero)当ZF=0或比较结果不相等,CX/ECX<>0时重复. PA6=wfc  
REPC 当CF=1且CX/ECX<>0时重复. rbT)=-(  
REPNC 当CF=0且CX/ECX<>0时重复. CE15pNss  
yfU<UQ!1  
五、程序转移指令 (;VVC Aoy  
─────────────────────────────────────── &rDM<pO #-  
 1>无条件转移指令 (长转移) >zkRcm  
JMP 无条件转移指令 ;Ut+yuy  
CALL 过程调用 ]]}tdn_  
RET/RETF过程返回. ) XQ`M?**M  
2>条件转移指令 (短转移,-128到+127的距离内) q_ =b<.;  
( 当且仅当(SF XOR OF)=1时,OP1<OP2 ) +.RKi !  
JA/JNBE 不小于或不等于时转移. BQ^H? jo  
JAE/JNB 大于或等于转移. ?)'~~ @NkH  
JB/JNAE 小于转移. OdMO=Hy6d  
JBE/JNA 小于或等于转移. gBu1QviU  
以上四条,测试无符号整数运算的结果(标志C和Z). 2/,0iwj-  
JG/JNLE 大于转移. lq.Te,Y%w  
JGE/JNL 大于或等于转移. %iJ%{{f`  
JL/JNGE 小于转移. [6jbgW~E  
JLE/JNG 小于或等于转移. 8/<jyJ  
以上四条,测试带符号整数运算的结果(标志S,O和Z). OT %nrzP  
JE/JZ 等于转移. W;?(,xx  
JNE/JNZ 不等于时转移. g%[n4  
JC 有进位时转移. 7dihVvL $  
JNC 无进位时转移. %/kyT%1  
JNO 不溢出时转移. 5CAR{|a  
JNP/JPO 奇偶性为奇数时转移. PIcrA2ll  
JNS 符号位为 "0" 时转移. 8GJdRL(  
JO 溢出转移. {>0V[c[~  
JP/JPE 奇偶性为偶数时转移. Dj-s5pAW  
JS 符号位为 "1" 时转移. &R+#W  
3>循环控制指令(短转移) QzGV.Mt2  
LOOP CX不为零时循环. 7J>Gd  
LOOPE/LOOPZ CX不为零且标志Z=1时循环. 8OWmzY_=  
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环. K0+ ;b u  
JCXZ CX为零时转移. _17|U K|N  
JECXZ ECX为零时转移. &UAe!{E 0  
4>中断指令 1S%k  
INT 中断指令 Y5A~E#zw  
INTO 溢出中断 HgJb4Fi  
IRET 中断返回 /<)-q-W;  
5>处理器控制指令 U+]Jw//l  
HLT 处理器暂停, 直到出现中断或复位信号才继续. l_FGZ!7  
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. Qb^q+C)o]  
ESC 转换到外处理器. {'3D1#SK  
LOCK 封锁总线. f~& a-  
NOP 空操作. gqiXmMm:9  
STC 置进位标志位. K/=8eg93Z  
CLC 清进位标志位. /4~AI=aw,T  
CMC 进位标志取反. ]Bu DaxWN  
STD (SeT Direction flag)置方向标志位. )y50Mb0+  
CLD (CLear Direction flag)清方向标志位. ;"7/@&M/m  
STI 置中断允许位. =:$) Z  
CLI 清中断允许位. xe:' 8J6L  
b;vNq  
六、伪指令 a+(j ?_FyI  
─────────────────────────────────────── R$0U<(/  
  DW 定义字(2字节). !'c| N9  
PROC 定义过程. Lt<oi8'N  
ENDP 过程结束. b~w KF0vq  
SEGMENT 定义段. vo;5f[>4i  
ASSUME 建立段寄存器寻址. 70 `M,``  
ENDS 段结束. oI$V|D3 9  
END 程序结束. x70N8TQ_gK  
el Kx]%k*)  
8088 汇编跳转 m!!;/e?yx  
cmp a,b 比较a与b yV_ L/,6}D  
mov a,b 把b的值送给a Qv!rUiXq  
ret 返回主程序 Ar~{= X  
nop 无作用,英文“no operation”的简写,意思是“do nothing” Gc}0]!nrW9  
call 调用子程序 lm &^tjx  
je 或jz 若相等则跳 ;y>'yq}  
jne或jnz 若不相等则跳 [;F{mN  
jmp 无条件跳 V<W02/Hs  
jb 若小于则跳 uXP- J]>  
ja 若大于则跳 3DI^y` a v  
jg 若大于则跳 FLEg0/m0  
jge 若大于等于则跳 9dw0<qw1%  
jl 若小于则跳 ;$[VX/A`f  
jle 若小于等于则跳 clC~2:  
pop 出栈 & ]%/.m  
push 压栈 (A|B@a!Y>  
y,1S& k  
MOV >pa/n9=Q^  
功能: 把源操作数送给目的操作数 (O Qi%/Oy  
语法: MOV 目的操作数,源操作数 T+3k$G[e/  
格式: MOV r1,r2 i"KL;t[1  
MOV r,m JJ)y2  
MOV m,r Kl!DKeF  
MOV r,data =CGD ~p`  
r$Yh)rpt:  
XCHG <)=3XEcb  
功能: 交换两个操作数的数据 HarYV :  
语法: XCHG Hs.6;|0%  
格式: XCHG r1,r2 XCHG m,r XCHG r,m <e$5~Spc  
c&0;wgieg  
PUSH,POP ~r{/WZ.  
功能: 把操作数压入或取出堆栈 .ou!g&xu  
语法: PUSH 操作数 POP 操作数 z +y;y&P  
格式: PUSH r PUSH M PUSH data POP r POP m tCd{G c  
~%D^ Ga7  
PUSHF,POPF,PUSHA,POPA nNd`]F^U  
功能: 堆栈指令群 6~:W(E}  
格式: PUSHF POPF PUSHA POPA '-$))AdD  
V)_H E  
LEA,LDS,LES CwTS/G  
功能: 取地址至寄存器 [q0_7  
语法: LEA r,m LDS r,m LES r,m (=S"Kvb~#  
GoGohsj  
XLAT(XLATB) f.U0E6-(3N  
功能: 查表指令 {<''OwQF~+  
语法: XLAT XLAT m ~#HH;q_7 m  
knNhN=hG+  
$M}k%Z  
算数运算指令 J]kP`  
}5TfQV6  
ADD,ADC Ti 9:'I  
功能: 加法指令 !%Z)eO~Z  
语法: ADD OP1,OP2 ADC OP1,OP2 '0])7jq  
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data (7rz:  
影响标志: C,P,A,Z,S,O BM=V,BZy  
)DklOEO  
SUB,SBB I;Z`!u:+  
功能:减法指令 Yq)YS]  
语法: SUB OP1,OP2 SBB OP1,OP2 r+V(1<`2X  
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data @]y{M;  
影响标志: C,P,A,Z,S,O QvK]<HEr  
6/V{>MTZg  
INC,DEC w7`@=kVx  
功能: 把OP的值加一或减一 F-reb5pt.=  
语法: INC OP DEC OP mAYr<=  
格式: INC r/m DEC r/m oRvm*"8B  
影响标志: P,A,Z,S,O qu#@F/gX  
gn e #v  
NEG (8m/#[T+R  
功能: 将OP的符号反相(取二进制补码) r/s& ee  
语法: NEG OP .>gU 9A(Nk  
格式: NEG r/m YRM6/S)py  
影响标志: C,P,A,Z,S,O zx]M/=7,V#  
i$LV44  
MUL,IMUL $nD k mKl  
功能: 乘法指令 MS*Mem,  
语法: MUL OP IMUL OP I` n1M+=%  
格式: MUL r/m IMUL r/m -"JE-n  
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) *!7SM 7  
0?4^.N n3  
DIV,IDIV 2Nt]Nj`  
功能:除法指令 8-g$HXqs_#  
语法: DIV OP IDIV OP =L; n8~{@y  
格式: DIV r/m IDIV r/m o'}Z!@h  
WZO 0u  
CBW,CWD ,vY I O  
功能: 有符号数扩展指令 ?Kz` O>"6  
语法: CBW CWD x?k |i}Q  
P*^UU/x'4I  
AAA,AAS,AAM,AAD HvfTC<+H  
功能: 非压BCD码运算调整指令 [(^''*7r+T  
语法: AAA AAS AAM AAD Fe>#}-`  
影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) WRyv >Y  
K>p:?w  
DAA,DAS -`<N,  
功能: 压缩BCD码调整指令 v ?'k)B  
语法: DAA DAS +( 7vmC.  
影响标志: C,P,A,Z,S leqSS}KU+  
:z5I bas:  
位运算指令集 *>H'@gS  
F>{uB!!L4  
AND,OR,XOR,NOT,TEST /e vgDZf  
功能: 执行BIT与BIT之间的逻辑运算 ^*>no=A  
语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m f*f9:xUY  
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 A)0m~+?{J  
e"09b<69  
SHR,SHL,SAR,SAL 3Jit2W4  
功能: 移位指令 nr%^:u  
语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL /3UdC{~  
影响标志: C,P,Z,S,O g)Uh  
35/0g&  
ROR,ROL,RCR,RCL )7TTRL  
功能: 循环移位指令 *Fs^T^ ?r  
语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL [IW7]Fv<F  
影响标志: C,P,Z,S,O oz r+6z  
.5zJ b Z9  
程序流程控制指令集 e1a%Rj~  
kF7Al]IgT  
CLC,STC,CMC G j0NN:  
功能: 设定进位标志 q3:' 69  
语法: CLC STC CMC ;W"[,#2TM  
标志位: C ]+S QS^4  
60$  
CLD,STD 1+#8} z:  
功能: 设定方向标志 P$yJA7]j;%  
语法: CLD STD w9BH>56/"  
标志位: D oE&[W >,x  
L i^V?  
CLI,STI 2;tp>,G9d  
功能: 设定中断标志 `XP Tf#9j  
语法: CLI STI CaMG$X&O  
标志位: I l+,rc*-j0  
5 Da( DA  
CMP 9|,AhyhO  
功能: 比较OP1与OP2的值 #c_ZU/" h"  
语法: CMP r/m,r/m/data )1ciO+_  
标志位: C,P,A,Z,O B'yrXa|P  
uNjy& I:  
JMP $I%]jAh6  
功能: 跳往指定地址执行 !% Md9Mu!o  
语法: JMP 地址 &H6Fkza;4  
4T" P #)z  
JXX &%<G2x$  
功能: 当特定条件成立则跳往指定地址执行 F/h)azcn  
语法: JXX 地址 8in8_/x  
注: ygHNAQG~  
   A: ABOVE,当C=0,Z=0时成立 HDYoM  
   B: BELOW,当C=1时成立 gg=z.`}  
   C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立 pdM|dGq^  
   E: EQUAL,当Z=1时成立 5we1q7  
   G: GREATER(大于),当Z=0且S=0时成立 .[7m4iJf  
   L: LESS(小于),当S不为零时成立 fE >FT9c  
   N: NOT(相反条件),需和其它符号配合使用 1cPi>?R:  
   O: OVERFLOW,O=1时成立 [e (-  
   P: PARITY,P=1时成立 f_}55?i0  
   PE: PARITY EVEN,P=1时成立 +IMP<  
   PO: PARITY ODD,P=0时成立 F$.M2*9  
   S: SIGN,S=1时成立 ~*&_zPTN  
   Z: ZERO,Z=1时成立 3N?uY2  
LOOP fZg Z  
功能: 循环指令集 U]_1yX  
语法: LOOP 地址 ?=6zgb"9-  
)V3G~p=0  
LOOPE(Z) q0Fy$e]u  
地址 LOOPNE(Z) 地址 =*t)@bn  
标志位: 无 LqW~QEU(  
?'^xO:  
CALL,RET K@+&5/y]  
功能: 子程序调用,返回指令 23 3jT@Z  
语法: CALL 地址 RET RET n pX"f "  
标志位: 无 po!0j+r3  
$33wK  
INT,IRET nD|Bo 9  
功能: 中断调用及返回指令 Ak&eGd$d  
语法: INT n IRET .- uH ax0  
标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器 3 (jI  
Z sv(/>  
字符串操作指令集 o^H.uBO{  
Nn>Oq+:  
MOVSB,MOVSW,MOVSD 7;5SK:X%dm  
功能: 字符串传送指令 :.J Ad$>P  
语法: MOVSB MOVSW MOVSD H+6+I53  
标志位: 无 Gg$4O8  
7M7sq-n5z  
CMPSB,CMPSW,CMPSD c<fl6o)  
功能: 字符串比较指令 5LMAy"  
语法: CMPSB CMPSW CMPSD Y,n&g45m  
标志位: C,P,Z,S,O P-U9FKrt  
N3"O#C  
SCASB,SCASW +6-_9qRq  
功能: 字符串搜索指令 1L3 +KD~  
语法: SCASB SCASW |q!O~<H@  
标志位: C,P,Z,S,O =e*S h0dK  
ON [F  
LODSB,LODSW,STOSB,STOSW D6N 32q@  
功能: 字符串载入或存贮指令 S3 Dmc/f  
语法: LODSB LODSW STOSB STOSW %^pm~ck!  
标志位: 无 Yc^;?n`x  
FIu|eW+<l  
REP,REPE,REPNE Be;l!]i  
功能: 重复前缀指令集 L NS O]/  
语法: REP 指令S REPE 指令S REPNE 指令S 2,'~'  
标志位: 依指令S而定 ,76Q*p  
#kQ1,P6,(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值