EDA365电子论坛网
标题:
8086CPU汇编指令速查手册
[打印本页]
作者:
cyxs
时间:
2016-11-28 16:46
标题:
8086CPU汇编指令速查手册
~~~
* _( L1 D7 A7 z8 p
8086 CPU 汇编指令速查手册
9 C" E% b, G1 v
一、数据传输指令
; i# A8 [( G B+ b
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
. ?; w% ^+ p4 j. P7 w& t+ G
1. 通用数据传送指令.
1 v4 j% T9 ~% Q/ S
MOV 传送字或字节.
+ s, A/ C/ ~' [8 ~' o6 C B
MOVSX 先符号扩展,再传送.
* N$ K) A3 F# h
MOVZX 先零扩展,再传送.
[, @" V1 t' H+ E L' B6 G
PUSH 把字压入堆栈.
0 i0 ^. F* r+ d7 M- s8 i% x
POP 把字弹出堆栈.
! c/ L1 H/ _+ S
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
! z$ Z9 j* m+ J. y( d {
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
( z1 _ p) d5 `0 i. G* D
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
6 T/ ~" k" |' g, j' l
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
H& k( c& P% q5 y. A( ~
BSWAP 交换32位寄存器里字节的顺序
$ Y4 T; u1 J( g, n- P. a
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
% @/ y) f' J i8 I g( q" ~' l" K
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
: B9 D8 s0 Q+ X, r
XADD 先交换再累加.( 结果在第一个操作数里 )
/ c; o3 e7 ]6 T6 H( i7 T
XLAT 字节查表转换.
* W4 V# p8 `/ {+ N4 c
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
. x5 z% D! s1 h# m. l/ f* D. y
0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
7 \; P/ V- `: F1 s" \ K8 c/ c- s
2. 输入输出端口传送指令.
; [/ I+ q n4 N
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
4 I$ S7 S3 n. x* @/ u/ G
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
3 B/ ?4 j! Q# R
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
. B( J/ X" m% q( o! X
其范围是 0-65535.
: g# |2 g$ j8 F& X. Q* p% G
3. 目的地址传送指令.
, H/ y' ^+ F9 [9 r
LEA 装入有效地址.
& T) n2 x" ~9 n) j! n) b
例: LEA DX,string ;把偏移地址存到DX.
4 O$ a+ O1 i1 T! a/ v
LDS 传送目标指针,把指针内容装入DS.
# Z; G+ i" q: N- N- Z3 p
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
/ G, w$ P, O( }- R. W
LES 传送目标指针,把指针内容装入ES.
) S8 L& F0 I$ ?" y* h
例: LES DI,string ;把段地址:偏移地址存到ESI.
2 x+ h8 ^! Z' D: p- t( {- k
LFS 传送目标指针,把指针内容装入FS.
& V: o- A2 M4 R3 R3 w' S
例: LFS DI,string ;把段地址:偏移地址存到FSI.
0 R) E% `, J( V, i' x& m
LGS 传送目标指针,把指针内容装入GS.
- r' f+ t. T" @
例: LGS DI,string ;把段地址:偏移地址存到GSI.
; [# V9 l! {% B/ x8 a
LSS 传送目标指针,把指针内容装入SS.
4 a2 `& W+ S6 V* W5 Y
例: LSS DI,string ;把段地址:偏移地址存到SSI.
* h1 Q4 d& E; M
4. 标志传送指令.
$ \1 z$ t% a: x! ]0 l. g" [
LAHF 标志寄存器传送,把标志装入AH.
8 e3 P! j. x2 h5 V
SAHF 标志寄存器传送,把AH内容装入标志寄存器.
, W' L- k4 O6 j" |: Z
PUSHF 标志入栈.
! p# @, \) h6 l0 W8 ` e
POPF 标志出栈.
0 b1 v7 l# E# A+ s% L
PUSHD 32位标志入栈.
8 `* e; P1 f4 P3 P, r. `
POPD 32位标志出栈.
) x6 k/ w% L! [! ~5 w1 }* i: S4 n! p5 g
二、算术运算指令
' m/ Y; [. e9 t; o
ADD 加法.
/ X, y4 {$ w3 W+ ]
ADC 带进位加法.
# u' d1 t o; m3 I+ [; g
INC 加 1.
7 m( S. v( [9 Q/ C& v x: p
AAA 加法的ASCII码调整.
. i: a) S1 }4 P: \( b+ Y
DAA 加法的十进制调整.
" x8 i/ ]& |+ [
SUB 减法.
1 S4 i" l3 }' c1 B: W9 m
SBB 带借位减法.
+ u" b' j/ |; E1 g4 z0 f+ V( Q. w* h$ I
DEC 减 1.
{* v& f0 G2 H, E) I& g! e' O8 w
NEC 求反(以 0 减之).
& L- y/ ]4 u; A& i1 \$ m8 E- U
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
0 x. K9 j$ m! u: [: v8 K
AAS 减法的ASCII码调整.
7 \) l: z" v8 Z, l
DAS 减法的十进制调整.
5 q. j8 S0 i: [" B4 A+ C
MUL 无符号乘法.
0 p0 m; u& V$ d
IMUL 整数乘法.
! R. W& `& r5 V! {4 g' o3 `
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
1 i$ |$ [3 Y* ~+ x3 o
AAM 乘法的ASCII码调整.
/ ~, q" r$ _; s* |' L: l6 w
DIV 无符号除法.
. y; H) ?5 ^/ |' ~& q
IDIV 整数除法.
- R' Y& C7 ?( r2 G
以上两条,结果回送:
1 A$ P$ v7 I" n1 H$ p/ l
商回送AL,余数回送AH, (字节运算);
0 g' V; l; X0 ?3 G2 O
或 商回送AX,余数回送DX, (字运算).
0 m, b# }; Q4 ]) C
AAD 除法的ASCII码调整.
: p/ L$ A- ~1 @. W; b( _
CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)
, C& ?2 j6 ]) U
CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)
2 ^0 p! G; ?5 m* K( Z/ S* l
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
4 z+ V- K4 K1 `- r$ R
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
4 `1 b2 ^* i: H# b$ o' c% V
三、逻辑运算指令
q5 f8 g5 ]2 m( z/ _: L0 d( O
AND 与运算.
& `0 _; Z( x. j T8 k
OR 或运算.
# W0 y/ h- u7 r5 ?: A9 M2 E8 R
XOR 异或运算.
. ^1 l, f j7 z7 I7 {$ U- h
NOT 取反.
5 T+ K( D6 I8 w0 h1 m# t
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
; d3 |5 N. Z/ V2 @
SHL 逻辑左移.
- D+ l1 d; l l/ O8 E
SAL 算术左移.(=SHL)
* z7 w) m2 F5 J# E P2 G
SHR 逻辑右移.
8 c7 n9 N% \1 `. } i( N
SAR 算术右移.(=SHR)
! J9 r- |& I& l x
ROL 循环左移.
4 `0 q; J4 q7 h6 ^2 P& [2 w/ m0 X
ROR 循环右移.
' h P' V. P4 K
RCL 通过进位的循环左移.
: Z. u1 o4 [( K/ v3 y( b/ ` a/ e
RCR 通过进位的循环右移.
7 L6 k+ X7 ]$ A+ c, i
以上八种移位指令,其移位次数可达255次.
$ z8 w5 q# E$ Q6 \# Z2 k6 d
移位一次时, 可直接用操作码. 如 SHL AX,1.
F! {% f0 m3 H: p+ Q5 |6 Y
移位>1次时, 则由寄存器CL给出移位次数.
' Z/ A) S" S* f) p7 {/ T; h
如 MOV CL,04
?$ _- V4 Q1 u* v' c8 q# r
SHL AX,CL
3 g/ d( J. p) h
四、串指令
- m7 D5 R% F6 F; ~( ]0 |8 ~
DS:SI 源串段寄存器 :源串变址.
8 d% O5 f% I- E- g
ES
) X& n8 a' [0 r9 q& E& _
I 目标串段寄存器:目标串变址.
; J- c" n& y9 p1 W& u! E1 E% o
CX 重复次数计数器.
& w+ s! d; d. T' ~+ V2 a$ H( I- R4 i
AL/AX 扫描值.
# Q, e& h/ A. b7 S2 M) r
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
! t, j b. q L
Z标志 用来控制扫描或比较操作的结束.
6 r" P) u0 Y' F. k
MOVS 串传送.
8 y u6 g7 o6 k. Z
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
* ~% K: Q4 }6 y, {8 u1 H$ N
CMPS 串比较.
2 R# c |( } m! @6 x5 d: T. h9 L
( CMPSB 比较字符. CMPSW 比较字. )
( \& q3 M& h5 R" I
SCAS 串扫描.
; U: m9 q+ [0 ?# U) }3 p
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
5 p! @/ @2 N6 C; L/ Y9 k$ m5 F) W! z
LODS 装入串.
* T3 r& s$ H7 ?/ Z/ ~
把源串中的元素(字或字节)逐一装入AL或AX中.
! \( D' o9 \/ L2 I
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
7 H2 V3 n" k" T4 E, \
STOS 保存串.
( q$ d7 \9 y7 U5 e) _9 d* a
是LODS的逆过程.
# `' N* t9 v: B; t
REP 当CX/ECX<>0时重复.
" g; q N5 `! E ^3 v
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
3 D" [+ C8 c& {4 L- o
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
- x& ]8 z& X3 R
REPC 当CF=1且CX/ECX<>0时重复.
1 |& O0 \! R" [- l
REPNC 当CF=0且CX/ECX<>0时重复.
5 h. H9 Z8 X. j: q, [ ]
五、程序转移指令
+ q7 U, D% d$ H: f( ] n4 @
1>无条件转移指令 (长转移)
8 n0 o; f) ~. @; O+ ~' b% `# Q6 ^
JMP 无条件转移指令
% [* G t# ]7 l/ A+ O7 `0 b
CALL 过程调用
. x4 Y' ]& ]3 o7 \$ ?. J# A* P' `
RET/RETF过程返回.
6 t. d4 ^5 n J9 I5 M5 `
2>条件转移指令 (短转移,-128到+127的距离内)
$ m( m9 s0 j$ X8 ?
( 当且仅当(SF XOR OF)=1时,OP1
. Q- E$ \0 P T2 Z
JA/JNBE 不小于或不等于时转移.
# L+ Z6 `8 C! [1 ?: L) _$ L
JAE/JNB 大于或等于转移.
v7 D. k7 v% ]; o) ?$ `- j$ C: ?
JB/JNAE 小于转移.
) U7 f: i# ~: z- ]3 Y% ]
JBE/JNA 小于或等于转移.
2 M- c5 ^ j, X1 d2 E: z! \
以上四条,测试无符号整数运算的结果(标志C和Z).
# P2 [( D) \ y/ _& e2 ?
JG/JNLE 大于转移.
# i7 s1 s3 x& d" \
JGE/JNL 大于或等于转移.
4 I- Q4 ~1 b8 C! A: r
JL/JNGE 小于转移.
3 ^* { d: j( Q% F' w
JLE/JNG 小于或等于转移.
% P* ~' L/ x5 M% R# |
以上四条,测试带符号整数运算的结果(标志S,O和Z).
4 [* }4 H5 o2 `1 r. H4 F. M6 }
JE/JZ 等于转移.
4 z: W. `9 X- T2 F/ F J- U
JNE/JNZ 不等于时转移.
- U. f V2 O) Q& x
JC 有进位时转移.
. `; D! B, y. G% x) o" [3 f
JNC 无进位时转移.
; ]* g$ \; _; @( L
JNO 不溢出时转移.
" a8 S2 f& l( p4 A
JNP/JPO 奇偶性为奇数时转移.
7 K+ ^) h" N" W# F; _* e3 @+ S
JNS 符号位为 "0" 时转移.
8 a9 `: ?4 M' @! |0 |+ [; q
JO 溢出转移.
; k3 q2 x# O1 y0 |
JP/JPE 奇偶性为偶数时转移.
$ p6 I& k( v, G& k) X# V
JS 符号位为 "1" 时转移.
8 u5 G1 }$ a4 _8 n6 X
3>循环控制指令(短转移)
2 k# ~2 {5 @% Z" P& Z
LOOP CX不为零时循环.
( {: E) {1 u3 c. _; {9 ]' h
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
5 Z0 Z4 h, E( t+ s. q3 `
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
8 ?: I! V0 T0 d
JCXZ CX为零时转移.
+ R& `/ J! Z& J) {
JECXZ ECX为零时转移.
( U2 O; h, W% I
4>中断指令
5 ^7 x2 ]+ n$ p! K
INT 中断指令
" A# I' a; O8 k/ g
INTO 溢出中断
4 O, {" A2 N s$ w% ~3 v+ g
IRET 中断返回
+ L) |! [! H: m" B/ ^0 d5 {6 o
5>处理器控制指令
- d5 X ]/ w" L' j3 B
HLT 处理器暂停, 直到出现中断或复位信号才继续.
% i: T. u0 Y8 E, j5 Q0 E1 ^) `
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
* |* `0 i! t3 h4 E. k: `
ESC 转换到外处理器.
' h6 y. ]% u" d$ ^$ O
LOCK 封锁总线.
9 }+ K/ ?* K# N- X* t5 y
NOP 空操作.
/ |9 L- H: I* S" |) v! D' l2 I
STC 置进位标志位.
/ W; F( }1 A5 E# u( V
CLC 清进位标志位.
2 A6 I) x* ]7 p% ?
CMC 进位标志取反.
# x/ |) g) V- \/ S- Z7 U
STD 置方向标志位.
B) \5 _7 D" r/ b
CLD 清方向标志位.
+ C0 e$ {6 h" h2 w
STI 置中断允许位.
; b" B& B& r2 C* |( A+ X& e
CLI 清中断允许位.
U4 h" @; u+ p
六、伪指令
9 g7 F! [2 \; R, n+ C# ?
DW 定义字(2字节).
2 W8 e- e2 p3 L
PROC 定义过程.
% ?% \) D( ^) P8 c# S/ W: J' I1 @
ENDP 过程结束.
3 k; M$ z! [& l/ X @" A
SEGMENT 定义段.
; I8 X7 E. q, X0 A
ASSUME 建立段寄存器寻址.
2 @& w1 d* E+ I; H' k
ENDS 段结束.
/ M/ Q; p1 x/ H5 i8 Y
END 程序结束.
8086CPU汇编指令速查手册.pdf
2016-11-28 16:46 上传
点击文件名下载附件
下载积分: 威望 -5
104.83 KB, 下载次数: 2, 下载积分: 威望 -5
作者:
ygcgsa
时间:
2016-11-29 11:22
捧场,谢谢分享!
# `4 M0 Z3 I R" Q& Q5 z
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2