|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
~~~
3 q; h! d! C: E4 G8 o8086 CPU 汇编指令速查手册
# g" W$ b. w9 y- w 一、数据传输指令* v9 Y* T& b& [! {+ c
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.- a7 F/ l5 ^2 o* T. x
1. 通用数据传送指令.
z+ a o% `* [* }! K MOV 传送字或字节.1 o5 F' @) b2 N8 ~. a3 S" x- z7 a/ Q
MOVSX 先符号扩展,再传送.2 q/ W. j0 `' R" f' n* Q7 f
MOVZX 先零扩展,再传送.
( h5 S1 z0 a$ s PUSH 把字压入堆栈.
8 }' n; `, E& n) ?, Q POP 把字弹出堆栈.
3 w r' d: F$ M% B, J PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.! q) ^7 g8 ?* q) Y2 j+ z) c
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
1 n; l8 X- ~. ~) Q" Y5 L. ~, F1 D PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈./ t7 T( B f. n' a3 F+ F" Z
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
/ T$ ~$ n$ ]# o* \ Q) N g BSWAP 交换32位寄存器里字节的顺序
- B; ~8 h# ?3 x% A# w XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) E* C7 a% m7 P% j# }+ x8 i$ Z' N
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
5 V1 A2 C) F# @: R& B) g: m' L XADD 先交换再累加.( 结果在第一个操作数里 )8 u2 U; g8 Y+ n+ z8 u0 u& ?
XLAT 字节查表转换.
$ P: C9 S S" O ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 O/ m% s9 d1 h, m; W
0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
: E* G* Y! Q. |; H4 q. E. J9 Q: q 2. 输入输出端口传送指令.
: v% X ?" T9 H1 h& j) I2 i8 L" D6 p IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )) g$ T6 m. X- Y5 |8 C( V) C
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
2 U, a$ y" Y' C' M% r' ?& i 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,; G* r5 N1 q4 F. R# P+ W( g" |
其范围是 0-65535." \* O, B- C% M) g
3. 目的地址传送指令.- M+ @7 e0 x' q2 a; H" W3 r
LEA 装入有效地址./ J' P- |" s+ K/ J0 k% n
例: LEA DX,string ;把偏移地址存到DX.& n4 ?6 a2 \, h3 _: Z2 V& u
LDS 传送目标指针,把指针内容装入DS.& z Y+ X. Q8 W2 U
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.8 l1 r( c4 A- u& i' A+ o
LES 传送目标指针,把指针内容装入ES.
5 d V8 E& d& T 例: LES DI,string ;把段地址:偏移地址存到ESI.- J2 j, l* p& m; f$ I) w
LFS 传送目标指针,把指针内容装入FS.! B& C2 f. N6 t/ ^
例: LFS DI,string ;把段地址:偏移地址存到FSI./ [- O% W" F- y" r* O9 H
LGS 传送目标指针,把指针内容装入GS.& }2 F4 N7 n4 O5 c9 `
例: LGS DI,string ;把段地址:偏移地址存到GSI.: Y+ w# F- I0 E3 x
LSS 传送目标指针,把指针内容装入SS.
0 a! G; v3 z8 E6 W7 Y9 S 例: LSS DI,string ;把段地址:偏移地址存到SSI.8 [, }& B' w, V
4. 标志传送指令.# K5 K; e6 A2 w1 Z# [& r
LAHF 标志寄存器传送,把标志装入AH.) g: O t0 A) Z" ~
SAHF 标志寄存器传送,把AH内容装入标志寄存器." p3 J3 }4 N8 @0 `! G `- z
PUSHF 标志入栈.
6 L4 G- z+ B! U POPF 标志出栈.8 y: G3 y& Q! H; k3 W9 l% l
PUSHD 32位标志入栈. F* v! C9 u: D; h" d/ o
POPD 32位标志出栈.% I6 m) [2 P2 o0 [' ^- H; @
二、算术运算指令
0 Z1 g- D' m: D' J ADD 加法.
/ H# b5 G2 q& O) N) r0 C8 R ADC 带进位加法.$ \) I8 `; k6 }# I+ f0 \4 a
INC 加 1.
8 x" `/ h. j& h" T8 ^ AAA 加法的ASCII码调整.2 L7 Q: J5 n, [9 x8 F
DAA 加法的十进制调整.4 ]0 w4 ~/ R& Z
SUB 减法.
6 E7 O7 i9 o, C& ^ SBB 带借位减法.
: j, j) W0 Y y; t DEC 减 1.0 ^2 U& G7 ]3 Z+ ? A! @
NEC 求反(以 0 减之).( e" V. C/ U: y5 F- }! `
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
$ H, t4 o$ O7 r2 `- l, h9 S" \# J4 Y AAS 减法的ASCII码调整.: h. v0 [3 X* i1 ?; p G. @0 i$ |$ W
DAS 减法的十进制调整.
; o9 ~, D% P+ o Q MUL 无符号乘法.
/ E Z& q( L, {. {+ [. O( g% D2 o* y6 J IMUL 整数乘法.
9 \, [) o( R7 ~( E2 `, q8 h; @ 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),+ |; M- E. l# u
AAM 乘法的ASCII码调整." k6 n' o" _5 y0 X
DIV 无符号除法.' Z8 l5 s0 S4 [: l! I
IDIV 整数除法.
6 v3 Z& H8 T) h 以上两条,结果回送: [2 M' k1 S8 d9 }3 O5 o
商回送AL,余数回送AH, (字节运算);
6 |$ \, O+ N1 K- p) ~ 或 商回送AX,余数回送DX, (字运算).
s" h I9 \( N" ` AAD 除法的ASCII码调整.; {! G8 d t2 l- _/ |3 ]9 U
CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)
! |3 P" I: K. [1 ]! ^4 l CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)$ t: u5 t' U0 X
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)2 i2 t V( z0 l3 T B
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
5 i2 X- s: {' f4 S9 N: \ 三、逻辑运算指令7 j" Q0 `; P1 l
AND 与运算.
, G3 w* S$ Y0 I# }7 U% p9 i, e OR 或运算.: h3 ?: L U. ~4 M
XOR 异或运算.
# n) P! a3 j0 [) r9 i NOT 取反.# Q! F- ^5 H& X3 \. ~% a u/ E5 N
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). r c4 S3 W2 {$ \* t/ f, Z% X& c2 [
SHL 逻辑左移.
3 I! L* s3 n' l C SAL 算术左移.(=SHL)
1 o& j) J* \: I# H5 |0 i, y SHR 逻辑右移.
& L) |) I; R6 [ SAR 算术右移.(=SHR)
0 ~7 J& @" m3 H' O ROL 循环左移.0 U* w) Z% c$ G
ROR 循环右移.
% G* h' G/ o4 R7 p! O2 u RCL 通过进位的循环左移.9 o& a. O7 X% J( b8 x3 Y7 t5 o1 U- a, C
RCR 通过进位的循环右移.4 Q8 e& R! s9 y8 j# l, n
以上八种移位指令,其移位次数可达255次.
) q4 o5 W+ F! S% r" s" v/ [, Y 移位一次时, 可直接用操作码. 如 SHL AX,1.( H6 p9 s' z# B+ R$ j: ]
移位>1次时, 则由寄存器CL给出移位次数.
% }2 E3 x' i- R% V) T) K K" @ 如 MOV CL,048 x8 |0 I; G P7 y9 T4 t Q$ p
SHL AX,CL/ P3 n3 w7 y# j1 _, _( u8 H
四、串指令
+ U7 Y1 J( `/ L/ ?- A* E2 f- w DS:SI 源串段寄存器 :源串变址.
2 r; f, {, ~0 L+ B1 T ES
+ s3 v" E& r" l3 P3 F I 目标串段寄存器:目标串变址.4 Z& q9 u! W6 D0 v# h3 L
CX 重复次数计数器.2 b) R0 ?# [# p, I A# K! w
AL/AX 扫描值.% x# q. z$ @1 z& f( M: f
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
2 G; D( {+ D4 d6 i# H6 Q6 ^9 p Z标志 用来控制扫描或比较操作的结束.6 O! z1 w" h" V
MOVS 串传送.0 @! [+ O- j" }
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )( H$ q+ e( a, J* K7 P
CMPS 串比较.
$ C; D2 k5 @& x. _ ( CMPSB 比较字符. CMPSW 比较字. )% d* D# ]0 U9 ^6 g
SCAS 串扫描.
, `4 ?. g. P6 m0 ~2 d6 G$ h 把AL或AX的内容与目标串作比较,比较结果反映在标志位.2 N5 l( n% [9 x# D' {3 l4 B& W# Q: ?
LODS 装入串.- a5 n* Y2 j: g1 k2 C
把源串中的元素(字或字节)逐一装入AL或AX中.
" V- C) } z1 J$ x% f ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
7 j; _+ w, e9 H4 m1 N: Y- c# ` STOS 保存串.
- M2 H, v$ u- |; t 是LODS的逆过程.' l/ o- W. K; E! Y0 h
REP 当CX/ECX<>0时重复.
% k9 L6 |# h) ]* Y' k1 l REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复." _ ^9 \ X/ u& V4 L6 d" Z
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
! e! [) U# p; L) q. Y: x2 N% s/ H REPC 当CF=1且CX/ECX<>0时重复.& g) U$ P# w8 U+ q4 N, e
REPNC 当CF=0且CX/ECX<>0时重复.5 X: V! Z2 l: a. i
五、程序转移指令- @. g+ y- F& b N# o
1>无条件转移指令 (长转移)
8 `6 V( D! d* ]7 r* S* G) v& V JMP 无条件转移指令- f2 l# I) f3 G5 S" i
CALL 过程调用
9 S- R3 |6 i$ R U! l. D; p RET/RETF过程返回.4 \! q% p. W0 I) ^& j
2>条件转移指令 (短转移,-128到+127的距离内)7 t N0 T$ ]& y, @* C# f! t5 o( ]
( 当且仅当(SF XOR OF)=1时,OP18 J9 g9 F$ @1 @* a, J
JA/JNBE 不小于或不等于时转移.* v& u7 t1 B# ~% P: ^! J
JAE/JNB 大于或等于转移.3 q2 W. J, i/ ~# A
JB/JNAE 小于转移.; ~( a* f6 R/ _6 D
JBE/JNA 小于或等于转移.
1 c% [* B. B% p/ ^7 }2 N 以上四条,测试无符号整数运算的结果(标志C和Z)." i N: D! {& W, H
JG/JNLE 大于转移.% ?4 I* r5 o) I8 g" ]
JGE/JNL 大于或等于转移.
2 t# }- @5 ?6 x9 v8 t( w, t$ Z; T JL/JNGE 小于转移.+ R+ e* [3 p: f% @$ z
JLE/JNG 小于或等于转移.
2 @1 m* d/ ]( S5 x4 m9 t4 o9 } 以上四条,测试带符号整数运算的结果(标志S,O和Z).
2 ^! ?; s; C& y" M, ~ JE/JZ 等于转移.
, w5 H( d1 j9 t- k% n# Z JNE/JNZ 不等于时转移./ t( [8 i- u. ]
JC 有进位时转移.
* {3 m+ {! ^( G5 P JNC 无进位时转移.
7 z: Z% `- x6 j/ | JNO 不溢出时转移.
7 r- Q3 L$ d/ S JNP/JPO 奇偶性为奇数时转移.4 U6 }! ~! v/ r' K) \" z8 H
JNS 符号位为 "0" 时转移.3 p# I3 N; m, E+ A' E9 u S
JO 溢出转移.
9 z" N4 _$ O. k+ D$ } JP/JPE 奇偶性为偶数时转移.
5 q, M4 F, v; L JS 符号位为 "1" 时转移.
' x& U, q* T0 K: v' `7 N% Y 3>循环控制指令(短转移)8 r$ O9 p5 s) `2 Y# r x
LOOP CX不为零时循环.1 t$ o: ]- Z. G. G7 n( m* _
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
4 Z* i1 p' e* e# s2 y8 ~ LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.! F, v: t; [9 J, s* f& c6 c
JCXZ CX为零时转移.
$ m0 v) d6 S/ ?7 V7 t6 I2 C JECXZ ECX为零时转移.7 E1 E K+ g4 z$ Q
4>中断指令
& p3 n# B- f8 f8 R! X" D. k INT 中断指令( \0 x% R C j( W# ]; ~
INTO 溢出中断
7 g0 c. W& g1 k7 C& Y9 g IRET 中断返回6 K6 U& m ^; Y$ \
5>处理器控制指令
$ f2 H! _. X; i0 L9 k* S6 b- A2 J HLT 处理器暂停, 直到出现中断或复位信号才继续.
$ U+ O0 b* B6 Y! s6 o. G3 G WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.3 U- o: r' ^5 U) H# v* c
ESC 转换到外处理器.! j9 M8 G8 ^. U
LOCK 封锁总线.
+ M2 J/ Y! e9 K9 Q, R NOP 空操作.- H. E5 d; {- D s. ^. P
STC 置进位标志位.
* c) u5 S1 f$ v- y$ S h. ?$ J6 E CLC 清进位标志位.
0 w. B0 Z3 h2 R5 Y: ?, ^" ^6 p- L CMC 进位标志取反.: {2 u. p/ V) ]8 r
STD 置方向标志位.
1 u. D( {5 E6 p8 J, O' M CLD 清方向标志位.
3 H! p0 x& J; t! w% F+ N STI 置中断允许位.8 B+ {4 k) j6 o3 j) X
CLI 清中断允许位.
6 O$ r6 \; p5 k+ k% ? 六、伪指令
4 m2 n: M3 t/ I- `4 ^( r6 a8 v- q DW 定义字(2字节).
; v1 Q3 n( {! O( z S9 o% L PROC 定义过程.# G8 T9 e/ j- N% l' @9 T5 m) J5 f+ d
ENDP 过程结束.
% z! S1 F7 P# T- D* k SEGMENT 定义段.8 K/ v3 p2 ~$ u p2 Y
ASSUME 建立段寄存器寻址.: ?( p$ E. ^ q2 @" f, D8 A5 O" J
ENDS 段结束.2 k8 s' g# o3 E
END 程序结束. |
|