后期资源网|非编软件网|杉宫竹苑|非编插件|高清视频素材|音频素材|非编软件汉化

 找回密码
 立即注册
后期非编系统发布及其详细简介后期非编系统VIP专享下载区影视后期非编模版免费下载区网站注册及其办理VIP业务说明
查看: 803|回复: 0

[教程] 汇编语言指令集

[复制链接]
发表于 2013-1-4 11:29:49 | 显示全部楼层 |阅读模式
汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
& k  F/ T8 N3 o6 Y3 a; @' L' s一、数据传输指令
. C5 ?( @7 N1 O3 E
  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。  6 \) y8 c" ?+ G8 T8 \
 1. 通用数据传送指令   , O5 G: [+ V$ V0 H
MOV 传送字或字节.   ' P+ R, _: z; k( E! H/ G
MOVSX 先符号扩展,再传送.   
1 e( F: V7 U: S. D6 W" TMOVZX 先零扩展,再传送.   
6 |/ Z2 N7 D8 Q- N' cPUSH 把字压入堆栈.   ; [# Y+ g$ T: H+ v
POP 把字弹出堆栈.   ) d- n- e5 J5 o, _5 f% L
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.   " G& h0 y) k/ [+ ~/ K
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.   ! h* R, ?3 }7 J2 w, `3 f
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.   
5 k# Y+ ?. u7 D! g  LPOPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.   
! @2 ?5 h& Y2 s9 ]/ V+ Y" fBSWAP 交换32位寄存器里字节的顺序   
( q* V2 Z7 M: G% P7 EXCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)   8 h2 ]" I5 Q) F$ e
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )   % E; N, Z- C6 V' n
XADD 先交换再累加.( 结果在第一个操作数里 )   4 o  @6 S/ b1 W
XLAT 字节查表转换.   
  i$ f  s9 A/ w$ F3 b── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即   0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )   & u$ N+ _( H! z: b2 D/ r

3 ~9 |' |2 B5 S4 C2. 输入输出端口传送指令.   
" ~) U6 L1 K% }" }# }, vIN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )   " ]' O7 j3 H  j% |. [% O
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )   
2 P2 Y* y/ q2 q输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,   其范围是 0-65535.   
* I) c" g* d$ ^; }
; C3 k& r) ^) _3. 目的地址传送指令.   
) x* w: T6 g8 Z5 K9 ^; s. b% QLEA 装入有效地址.   例: LEA DX,string ;把偏移地址存到DX.   
2 `8 j0 o8 o. i( i( J1 U8 z0 w" B- G' LLDS 传送目标指针,把指针内容装入DS.   例: LDS SI,string ;把段地址:偏移地址存到DS:SI.   
2 ]/ ^: z" `* s( C6 J' y2 R- hLES 传送目标指针,把指针内容装入ES.   例: LES DI,string ;把段地址:偏移地址存到ESI.   
* u; |# S, l# ~0 r3 J6 qLFS 传送目标指针,把指针内容装入FS.   例: LFS DI,string ;把段地址:偏移地址存到FSI.   
" |5 N* l. i" ^9 WLGS 传送目标指针,把指针内容装入GS.   例: LGS DI,string ;把段地址:偏移地址存到GSI.   
! U, r! n2 r( Y: ]- V: z' bLSS 传送目标指针,把指针内容装入SS.   例: LSS DI,string ;把段地址:偏移地址存到SSI.   . L7 M# l% L% V6 A  U8 _0 l, W' I
( \6 O( G, l; M# O: v( V
4. 标志传送指令.   
% S) X) p8 k& DLAHF 标志寄存器传送,把标志装入AH.   
; J1 u2 Z3 R2 a  bSAHF 标志寄存器传送,把AH内容装入标志寄存器.   
$ L0 C0 A6 e4 x  Z  i( G% ]! ^PUSHF 标志入栈.   * }8 W: R1 N9 I3 z  c/ b
POPF 标志出栈.   
0 o8 T8 t5 ]) ~3 tPUSHD 32位标志入栈.   + W7 [5 h$ ]# h7 c
POPD 32位标志出栈.
$ \, j' z8 r& M' H+ e% X2 T$ }二、算术运算指令& R# F  {$ E( F  t
6 O7 b7 P7 \1 k* Q
  ADD 加法.: N/ c3 b. W0 O) P
  ADC 带进位加法.* F! a" ~8 [7 P
  INC 加 1.3 G2 v! Q, @( D/ ^9 N
  AAA 加法的ASCII码调整.
3 c3 ^2 q+ I' G, q  DAA 加法的十进制调整.5 Q% O+ @7 C" O: U# I# P# Q8 D
  SUB 减法.
5 U7 L$ C6 W; P, {  p  SBB 带借位减法.
: K2 e3 t3 D( h  DEC 减 1.. ~; ^- O1 d, `2 C. J) @% w  m
  NEC 求反(以 0 减之).
( z8 q- d3 ^; `1 G5 r) N8 X  CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).* d* n9 V6 k+ q, z8 j& y
  AAS 减法的ASCII码调整.6 G- e0 n9 }8 n: \* I. I- [( ], {
  DAS 减法的十进制调整.
+ v' Q' F) C9 `& Q) j. f% H  MUL 无符号乘法./ U9 ^  o/ v0 e4 S2 T5 K1 ?
  IMUL 整数乘法.! ?( v" r4 \3 m  d
  以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),, V* Y+ O8 x4 l) k0 ~
  AAM 乘法的ASCII码调整.  u& \; u( K% Q* J/ `
  DIV 无符号除法.! o4 l+ K/ s& d! u
  IDIV 整数除法.
( z" F9 w1 K5 r: m2 N  以上两条,结果回送:# ?9 ^5 k: s9 k
  商回送AL,余数回送AH, (字节运算);
0 I; _" s- P9 t% @$ j  ?+ {( c  或 商回送AX,余数回送DX, (字运算)./ w, J9 z' I( e
  AAD 除法的ASCII码调整.
5 g" U+ a9 p$ j' I: {* T  CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)1 r8 b: O! F7 X
  CWD 字转换为双字. (把AX中的字的符号扩展到DX中去). k( O% n0 z$ W0 l0 m" @7 V" P. |
  CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
# R; H. _% ^7 u. z& ~2 X1 I  CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
" A  X* [- f- i* U; o0 }5 i三、逻辑运算指令
/ w- Q& U) t$ @: a8 @4 S
5 v& c# e; `' d- Z) X* l6 M8 a
  AND 与运算.
4 \* X# A2 H1 E' r& Q  or 或运算.# Z  P6 }- `: N5 r/ p, K4 p* f
  XOR 异或运算.
& Y- g, J' g% c5 @8 E- O  NOT 取反.
2 U% I4 G: T* i+ B  K' {7 Q# j2 U* z  TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
, L" m3 C) ]" x9 m+ l* U1 E$ D2 y  SHL 逻辑左移.
! x% [* r# Y9 \0 p3 Q% Y7 A7 E  SAL 算术左移.(=SHL). ?" X4 D1 S8 e% Z
  SHR 逻辑右移.3 Q+ U( \! a: Z' C5 p
  SAR 算术右移.(=SHR)
- \9 u; l) q/ @  ROL 循环左移.! t8 V. s6 F! ~/ f+ K, `; ]5 J
  ROR 循环右移.
3 x4 @! |- \2 z7 y- ^) x8 |  RCL 通过进位的循环左移.( q" n# I9 l& w- V
  RCR 通过进位的循环右移.7 ~9 D! N$ D2 R6 x  {. g4 ]
  以上八种移位指令,其移位次数可达255次.
3 B5 v( F  o7 @4 k% s+ Y+ H/ n  移位一次时, 可直接用操作码. 如 SHL AX,1.
0 Q0 J1 }1 c. a" Y9 C9 e; }  移位>1次时, 则由寄存器CL给出移位次数.& j  y3 O. H6 d1 n# G
  如 MOV CL,042 b& N  p9 N/ _1 H# d, G1 S, }9 |
  SHL AX,CL ' I, V4 m+ @2 k; M. i; Q4 I: s9 @
四、串指令
+ v2 Y: q8 P/ L% C3 D; M2 c

5 u# j* ^% ?0 F  l+ P7 V# I  DS:SI 源串段寄存器 :源串变址.$ r' w4 l! M9 V- c
  ESI 目标串段寄存器:目标串变址.4 p% x/ Y& j. p
  CX 重复次数计数器.
3 M' _/ j' r  X  AL/AX 扫描值.
/ y. l& ~( o5 O0 m  D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.; s, `6 m2 m' m0 V" k& E( a! M8 o
  Z标志 用来控制扫描或比较操作的结束.- K  g& ?( }& ]# @. W3 I
  MOVS 串传送.
) [6 W) U. u3 \7 Q  ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
+ [* [% d1 d: F; U- n( I  CMPS 串比较.
- H8 b: a/ p. p* m" d  ( CMPSB 比较字符. CMPSW 比较字. )
3 F7 A) q  y6 @# F+ K# o6 J  SCAS 串扫描.
! v( G6 b4 N+ u6 B( R3 h) ]) H  把AL或AX的内容与目标串作比较,比较结果反映在标志位.$ B  I/ r* _( M7 O
  LODS 装入串.5 ^7 b- u1 j9 |4 ~# g' ^% V$ n* k5 p
  把源串中的元素(字或字节)逐一装入AL或AX中.
9 w% M: _4 f& d# D: s0 d* g) j! g+ x  ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )& n! J" p$ o6 a% F# ]& U4 P0 m& ?7 R
  STOS 保存串.
, R+ v  _2 o* d+ o4 ~  是LODS的逆过程.+ ?* E0 e3 K7 B9 k3 e# z
  REP 当CX/ECX<>0时重复.
# k/ z( \; E7 `' L  REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
1 v$ t& x1 |4 k, E' ]6 U  REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
5 b/ H/ k3 ]' t3 `7 Q. n  REPC 当CF=1且CX/ECX<>0时重复.
. i$ a: x8 ?: g( |& h7 a+ Z) W$ [  REPNC 当CF=0且CX/ECX<>0时重复.
( ?: G+ {- y) P) p% Q9 ]6 w% K五、程序转移指令- h3 N. s8 h* E8 c% M1 F, z) c

. U7 r2 z, I: r  1>无条件转移指令 (长转移)
' x, |( D- N4 E; N0 g$ ^: ]  JMP 无条件转移指令
4 M- {" d, ^- V* \  CALL 过程调用
0 I: i" s5 V6 D0 R7 Y, {6 }  RET/RETF过程返回.) R/ [- o0 P# n) H. x
  2>条件转移指令 (短转移,-128到+127的距离内)1 C9 h4 r2 [! c. h3 J% Y% S) W
  ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )" I* ?. A& x/ k; c4 c, l
  JA/JNBE 不小于或不等于时转移.
1 a% U& x: _2 g6 M- F  JAE/JNB 大于或等于转移.
! h* J/ J: h& N2 i  JB/JNAE 小于转移.
' P# m8 T" q2 F- l0 {  JBE/JNA 小于或等于转移.+ a5 w6 Z+ ^& Q/ I/ U
  以上四条,测试无符号整数运算的结果(标志C和Z).
& N8 [% S  k: J! E1 s) |  JG/JNLE 大于转移.
0 c3 i* N- A1 l1 \  JGE/JNL 大于或等于转移.
1 ?3 X( e& J$ k& M% d2 u  JL/JNGE 小于转移.
, d. U) H' @+ q! G5 Q1 k  JLE/JNG 小于或等于转移.3 d& r/ {$ ?! c  i
  以上四条,测试带符号整数运算的结果(标志S,O和Z).+ D+ R' p  p6 f5 F  \
  JE/JZ 等于转移.& ]7 D) [: Q  i! x# ]( g, _2 o0 q
  JNE/JNZ 不等于时转移.3 R5 V+ ?4 {, ^  ]
  JC 有进位时转移.
2 v( p# T$ N* `8 [  JNC 无进位时转移.4 [1 b9 Z  V- B6 E/ r( \8 Y
  JNO 不溢出时转移.
8 ~/ x  y& V$ f7 v  r% @1 Y  JNP/JPO 奇偶性为奇数时转移.( B1 y/ t0 j& A# y3 I
  JNS 符号位为 "0" 时转移.& ^" l. n$ X4 h: S$ d
  JO 溢出转移.; e$ C- U# c. Y, k1 h% f
  JP/JPE 奇偶性为偶数时转移.
% B; a. J7 p; K) H$ s" P  JS 符号位为 "1" 时转移.
. o) g1 d( G; Z! ^; U  3>循环控制指令(短转移)
& r+ V! r$ ?! r( V) z; W% v% F1 o  LOOP CX不为零时循环.0 `. i/ A' s# @8 }
  LOOPE/LOOPZ CX不为零且标志Z=1时循环.8 U! X% P% z/ Q" j$ e2 @
  LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
5 j4 w1 m' q5 [  JCXZ CX为零时转移.9 B$ ~) B, o! g- F8 Q
  JECXZ ECX为零时转移.0 j7 U: t! Q+ I* ^
  4>中断指令
. X& k" x& w7 R, G3 }* p  INT 中断指令
8 ]# O- }! X& t3 \9 r' V$ J; C3 F  INTO 溢出中断+ p6 s: [: H: E( T
  IRET 中断返回
' W9 {% M  I$ |- @' Y1 M! L  f  5>处理器控制指令" f& }: q% u4 I4 |2 u. Y; X
  HLT 处理器暂停, 直到出现中断或复位信号才继续.
! p! }0 Z4 _$ G4 Z  WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
) J$ p! c/ A( K$ i  ESC 转换到外处理器.
6 |) ]; q  E; U3 `* G6 K0 T  LOCK 封锁总线.9 [1 L0 ?. f1 l3 e5 _, f
  NOP 空操作.
- d3 N( q  b) P! V2 p  @, f  STC 置进位标志位.
& X5 A: k6 k- |* l, w/ g  CLC 清进位标志位.; {) F7 \* o* a7 q
  CMC 进位标志取反.
; _( ~; F$ a) E8 W0 M* E3 g* l$ G$ ^  STD 置方向标志位.
$ p, U7 l% C$ [$ d4 {, K" C% u  CLD 清方向标志位.
/ Q# I5 D7 `4 s" z) w0 G- i; u( n  STI 置中断允许位.
. w% z3 ?( C+ G: F  CLI 清中断允许位. 9 L* `7 X! |8 D& ]
六、伪指令0 U1 z: g( `$ A& F/ y
7 }2 n3 u7 [5 k+ n' M) |* D
  DW 定义字(2字节).
4 v& g( F8 }& q' P) j  PROC 定义过程.
- @# F7 S  i1 a- w  ENDP 过程结束.
/ A# V1 F4 d$ T1 U+ y) s  SEGMENT 定义段.* H* {3 c# C$ t7 [9 _0 ?# {
  ASSUME 建立段寄存器寻址.
2 c/ H5 t$ g8 G: S- l- N  ENDS 段结束.# b! x" s* B) _
  END 程序结束.$ l$ ~# L! \& n6 O* \
  七、处理机控制指令:
- G; V! T' o+ |9 X  O. e$ {  标志处理指令 CLC(进位位置0指令)& u: \6 Y3 {4 s0 r7 [% S
  CMC(进位位求反指令)
$ L8 H0 t7 k" |/ s# T  STC(进位位置为1指令)
9 h3 {7 l" W! u6 _$ ^, n5 t, I! h  CLD(方向标志置1指令)
! A$ P& N$ O0 `* L6 @/ y* d2 \7 l  STD(方向标志位置1指令)
, S; v6 h; A3 F1 {- ~  CLI(中断标志置0指令)1 S8 E3 ]7 p. W$ B* J
  STI(中断标志置1指令)) K. G3 l$ P! c! _9 s( B
  NOP(无操作)
$ }# q/ `2 X/ B& [$ I  HLT(停机)
  [- v) Q! r5 |4 G& z  WAIT(等待)
9 [8 S6 K4 g7 T* }- D" D$ a  ESC(换码)0 q+ n! [. s% [$ t1 d  c2 L. A* ]/ C
  LOCK(封锁) , _* d% w" S4 J9 V8 e
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|后期资源网

GMT+8, 2024-5-3 00:55 , Processed in 0.123496 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表