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,CL3 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

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