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

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

[教程] 汇编语言指令集

[复制链接]
发表于 2013-1-4 11:29:49 | 显示全部楼层 |阅读模式
汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
: E. ^- ]3 \7 `" k% z一、数据传输指令! s5 T+ }- a( d4 L8 r
  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。  / M; m4 J# r- T5 b5 [
 1. 通用数据传送指令   
3 P) m- B5 T' @; w* y" S5 c8 zMOV 传送字或字节.   ! T5 ~  t/ s7 |( t9 ~
MOVSX 先符号扩展,再传送.   
! s& h& A. @0 @6 z" yMOVZX 先零扩展,再传送.   $ `0 U( U  g7 v. X  Z& N/ C( ~8 P
PUSH 把字压入堆栈.   ! ]9 N, F* [/ z9 p- L. i
POP 把字弹出堆栈.     f. t, J" N0 e$ {) L6 o
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.   : Q$ R9 T! `2 w, B$ C
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.   
( G$ J' [: l4 X: i9 yPUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.   7 \  N/ _' `: W+ H  c' W: K
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.   : w; j3 ^; q6 d, D, Z% F
BSWAP 交换32位寄存器里字节的顺序   
$ k1 |% j0 Q' I6 pXCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)   6 _% e/ F! X4 A' T! v( y
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )   
, R) Z+ B) P3 l# qXADD 先交换再累加.( 结果在第一个操作数里 )   # d. z5 ^! `- W/ r4 ^
XLAT 字节查表转换.   ( O* G  J4 B1 j3 Y  s
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即   0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )   
! b0 S8 `0 t+ t8 E; _, ~2 i- r/ ~+ H: w
2. 输入输出端口传送指令.   
4 f. E' u2 W3 T+ q7 W+ }; ^IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )   # O5 P& o. k1 W+ U$ X7 ]
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )   % T+ _) [$ H9 Y7 D4 A
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,   其范围是 0-65535.   , o# v. U; ^4 }/ ?: b; v7 T
9 {/ @& u$ k# X  _9 Q
3. 目的地址传送指令.   0 j2 H4 b( P' ^9 B9 Y
LEA 装入有效地址.   例: LEA DX,string ;把偏移地址存到DX.   ! M2 t$ A4 G8 k6 C" p, Y
LDS 传送目标指针,把指针内容装入DS.   例: LDS SI,string ;把段地址:偏移地址存到DS:SI.   
1 Z( G5 i% o" T" S; gLES 传送目标指针,把指针内容装入ES.   例: LES DI,string ;把段地址:偏移地址存到ESI.   
" f$ y# |# @! l- t# m8 YLFS 传送目标指针,把指针内容装入FS.   例: LFS DI,string ;把段地址:偏移地址存到FSI.   
0 @8 F7 w4 Z9 uLGS 传送目标指针,把指针内容装入GS.   例: LGS DI,string ;把段地址:偏移地址存到GSI.   / W( C) n* j1 w8 D# R9 o: a( i
LSS 传送目标指针,把指针内容装入SS.   例: LSS DI,string ;把段地址:偏移地址存到SSI.   
0 ~0 i  y2 _' ~0 T5 L7 ~8 y5 p( c6 P- t* E# f6 ~
4. 标志传送指令.   
6 V; p! u6 f9 [LAHF 标志寄存器传送,把标志装入AH.   
2 v" K0 u% a6 a, X- e" ISAHF 标志寄存器传送,把AH内容装入标志寄存器.   
$ x' \2 ]" b* f; B  u5 u% X7 U7 J* XPUSHF 标志入栈.   / A" e  E) {% k5 w. u5 V. j
POPF 标志出栈.   ; M; [7 m8 h* [  r
PUSHD 32位标志入栈.   / D5 j% M. h) c6 l
POPD 32位标志出栈.
4 J, S% t2 S' |* P- b" ]+ ~二、算术运算指令* V1 D0 o+ L  @2 [  \* i
* N" |. A, z, s& E, t; O
  ADD 加法.# A, \2 m- O; }4 E9 d7 Z* `
  ADC 带进位加法.
' P5 o- S: p) X! G; L  INC 加 1.8 b, v/ F5 n- C& w
  AAA 加法的ASCII码调整.% V( H5 Y2 g; k+ i" @/ K( _. _
  DAA 加法的十进制调整.6 p6 h  _( l/ S' _: D. I0 E2 H0 n8 M
  SUB 减法.
* o# P# x# M' |* w8 W4 q. P6 f  SBB 带借位减法.
; i0 d: M5 N0 t0 L# A: B7 j) B  DEC 减 1.
% d! V8 b; d- W5 l1 B7 z# T1 D  NEC 求反(以 0 减之).
% H/ a3 [% U! i  CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).4 W3 c! b& A4 Q6 n
  AAS 减法的ASCII码调整.( o, ~# D5 Q4 a; v: ?3 p  w
  DAS 减法的十进制调整.
9 @, b5 N1 m5 P: R: F! z3 i% i  MUL 无符号乘法.
3 O6 q0 R! _" |* v$ C! L  y  IMUL 整数乘法.# Q; [8 ]0 M) a) W1 B0 H( R
  以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),  k+ r% f: J1 e& `; v. x% I
  AAM 乘法的ASCII码调整." I' }! w( y8 \1 n* @/ k( T2 b
  DIV 无符号除法.
* ^1 M! Y* `* Z. n3 d8 t  IDIV 整数除法.% A% \1 ]7 y  {. G% B! b0 o
  以上两条,结果回送:
9 H  h) H8 `& w. A% i2 B" M4 X4 L  商回送AL,余数回送AH, (字节运算);* U# Y/ |+ H; p1 }- I2 s8 N
  或 商回送AX,余数回送DX, (字运算).8 }. W+ q9 V0 t, d* y! m+ f9 U
  AAD 除法的ASCII码调整.
8 \9 ~! |3 d4 _$ q2 G  CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)2 I7 n. z0 C7 e5 |% b
  CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)+ x* ?. Z* \$ ~' ]2 O( X2 M. m
  CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去). h7 R& @4 ^# h
  CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) ; Q; K$ V0 A& i, ^2 i9 K
三、逻辑运算指令
! g: `+ `& V5 p$ Z2 |0 T, ?# ^$ p
/ _, x$ G# Z* ]) W+ T
  AND 与运算.
! Y+ Q: u) G0 e+ L  or 或运算.; w* t, u1 h! N. K1 N) Q2 [5 M
  XOR 异或运算.
0 V9 L. e0 ~6 R- Z8 q  NOT 取反.
8 N4 R. l( q4 _3 H& I: W  TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).% g$ |( @/ m* ^$ N3 t
  SHL 逻辑左移.
) [& G0 ~" B, Q. l  SAL 算术左移.(=SHL)
7 p% n0 R* [- A& m% H! m  SHR 逻辑右移.
) c1 l- _- d2 w9 u  SAR 算术右移.(=SHR)
  Q/ p* B. n6 [/ {& C, y  r  ROL 循环左移.
0 q  T. p' j& Q5 r# A' f7 W  ROR 循环右移.
# ]; B6 {& |9 j5 P: I' w  RCL 通过进位的循环左移.
! R2 e% f  M& t' v, g8 S' @  RCR 通过进位的循环右移.
" N) {7 C. Z1 |  以上八种移位指令,其移位次数可达255次.& F& p6 f/ d1 ^# C( r3 ]# D, V
  移位一次时, 可直接用操作码. 如 SHL AX,1.; b! S6 H, Y& G
  移位>1次时, 则由寄存器CL给出移位次数.
5 F$ B) v# Y3 ]6 j/ e* J  如 MOV CL,04
9 S7 h; A) H+ r, K  SHL AX,CL * I! V0 g9 |; M9 a* Q
四、串指令
# E2 l9 E( D4 E4 s2 Q

6 g# g# _  ?0 D5 n  T) `0 ^# X  DS:SI 源串段寄存器 :源串变址.
9 v9 }9 t4 N. V: J  y  ESI 目标串段寄存器:目标串变址.
$ p% X' A1 m( P4 m% T' @1 Y  CX 重复次数计数器.) Y5 ^) ?* D, |
  AL/AX 扫描值.$ t  b  E! \, z0 b) T* ]# B+ e
  D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.2 y5 }0 @5 c  i! \" e
  Z标志 用来控制扫描或比较操作的结束.
1 V6 l( I- E3 Y: a* _5 t  MOVS 串传送.
. ?$ {, `7 H" a! x% b. l7 n  ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ): E& }" b: b; M6 a
  CMPS 串比较.
# f7 }. d" ~: y" L9 f5 a! B4 ~  ( CMPSB 比较字符. CMPSW 比较字. )3 p/ L. G4 l& F
  SCAS 串扫描.7 g1 L2 z$ [. }  q$ |5 p! x
  把AL或AX的内容与目标串作比较,比较结果反映在标志位.$ ?7 r1 h3 ?9 B; a* X
  LODS 装入串.
- n) }. w* y% ]+ o. p  把源串中的元素(字或字节)逐一装入AL或AX中.: y7 r3 Z; }) X; t+ `0 Q8 k9 e
  ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
0 Y4 ?2 `8 D3 g# S* J: l  STOS 保存串.
: h% c0 O( K4 u9 H) R- d, a  是LODS的逆过程.# K! v4 p3 E$ F
  REP 当CX/ECX<>0时重复.
* l# w" G: z. w' X  @9 W) \  REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
) G' D. d  w: K5 J  REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.- ^" r& J1 }3 y  ^" o2 b7 W
  REPC 当CF=1且CX/ECX<>0时重复.0 D* N" \' _* h. L  M
  REPNC 当CF=0且CX/ECX<>0时重复. 9 c8 c6 m. D8 N* g8 V# i, T
五、程序转移指令
7 m; U( p9 G4 h! m
& N9 K9 B0 p+ I% f7 G
  1>无条件转移指令 (长转移)
/ Y! K! M, i/ [  JMP 无条件转移指令
3 x  E% @. {4 k2 S. A  CALL 过程调用
/ v" N& R8 j* ^. o8 P  RET/RETF过程返回.! T  L; e9 d( G3 |/ U0 Y
  2>条件转移指令 (短转移,-128到+127的距离内)
4 m& C- T& y) d( x9 {: Q$ Q  ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
" {3 n1 D6 x; @1 F  JA/JNBE 不小于或不等于时转移.
7 l& w2 ]+ E" r/ P6 ^! _  JAE/JNB 大于或等于转移.
/ G9 y0 z. {2 ]$ N  c+ j) {* P  JB/JNAE 小于转移.' i# T. t, n. k+ j
  JBE/JNA 小于或等于转移.: p/ n6 Q$ r+ ^% H: c% i' ?8 a
  以上四条,测试无符号整数运算的结果(标志C和Z).1 K1 U3 G/ x- g! T# v- I
  JG/JNLE 大于转移.1 c1 h, `' I6 u: c8 h5 r2 A
  JGE/JNL 大于或等于转移.
9 e" i6 p/ r- m1 r! r6 e  JL/JNGE 小于转移.
  B3 o1 P% s5 ]  JLE/JNG 小于或等于转移." H  s0 e2 S7 T. m. S
  以上四条,测试带符号整数运算的结果(标志S,O和Z).
$ U9 I" k. [) R6 S. f7 ~% S0 ]  JE/JZ 等于转移., {3 l, |& {" v4 u1 n
  JNE/JNZ 不等于时转移.
6 T* ~% E6 R" B& ^+ F  g  JC 有进位时转移.1 p  K, e3 q0 f
  JNC 无进位时转移.
0 w( p& ?* P6 Y3 H4 r5 l2 @  JNO 不溢出时转移.
0 g; i7 T+ z0 r  r8 D9 m4 _! Y  JNP/JPO 奇偶性为奇数时转移.! k1 e2 ~. v1 `1 K2 \
  JNS 符号位为 "0" 时转移.8 ~4 u& M3 G( U! C, D: d3 O
  JO 溢出转移.1 u4 p  T, v5 s% Q/ X# L; ?) [
  JP/JPE 奇偶性为偶数时转移.
+ a. x. H( S. {0 S- q) z* d$ A  JS 符号位为 "1" 时转移.
6 D0 p" o$ W& }1 O$ ]; k  3>循环控制指令(短转移)
2 r/ s1 K8 B* v( k  LOOP CX不为零时循环.
( H/ f; U% m/ P# [. ?( }7 s  LOOPE/LOOPZ CX不为零且标志Z=1时循环.3 M6 N) l- {# R  a0 b* Q' E
  LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
- c0 t+ T& A4 x. [% s) I  JCXZ CX为零时转移.1 j/ N7 J% ?2 ^: G% Q2 N
  JECXZ ECX为零时转移.' t/ A& x) U  l
  4>中断指令+ k8 @& n/ \5 f3 u+ K( i
  INT 中断指令1 T& w8 a9 R( B5 H' q
  INTO 溢出中断' g$ N5 t- B  r5 E% W% X8 ^
  IRET 中断返回$ f5 C3 v; |; J! }0 S% O* d
  5>处理器控制指令9 J' z" [( `$ j9 ?! ?
  HLT 处理器暂停, 直到出现中断或复位信号才继续.
  s! ~& h4 I, u1 [6 f  WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.' }0 T" q  ]3 D# ?2 I
  ESC 转换到外处理器.5 Z( ]' `$ Y: H' v5 I
  LOCK 封锁总线.% d- K, ?. }* B& Q
  NOP 空操作.: u; j( m! g6 t" W! W! A  b. U+ `
  STC 置进位标志位." f& ?) T% e3 _$ U; V
  CLC 清进位标志位.
7 n9 ?3 N4 ?; T- u. x. B  CMC 进位标志取反.$ P' I6 a" \0 P4 ?% {$ H
  STD 置方向标志位.
4 z' [7 i, [3 N1 r! A% P8 J4 i  CLD 清方向标志位./ R* V$ I7 H) C% L
  STI 置中断允许位.3 u3 Z" H- H/ [% \! x: s
  CLI 清中断允许位. ' f7 i) Y1 C% J) `, X
六、伪指令2 ?0 g/ y! C7 A$ G! r  S7 z

9 k( R* r* G* `3 w. m1 U3 T  DW 定义字(2字节).: ?$ Q0 X/ K  U  s2 d
  PROC 定义过程.
. L! o4 s& k; f, Q" v5 c0 B  ENDP 过程结束.' l, Z. o1 F5 [+ E0 j
  SEGMENT 定义段.
4 C2 \8 i4 [% ]) m2 `$ T" s7 f  ASSUME 建立段寄存器寻址.: K0 {8 \, }$ z6 t9 G( }0 P3 N
  ENDS 段结束.: P' n8 Y" ]- Z) r) A/ U: ^
  END 程序结束., W2 c7 M2 ]; P- Z- N
  七、处理机控制指令:
, Y; H' ]) p$ S/ Z  标志处理指令 CLC(进位位置0指令)' `- w) w; f5 I! {. g
  CMC(进位位求反指令)' B5 b# g: s% b: p
  STC(进位位置为1指令)
/ h$ ?. E" B, Q# z8 p  CLD(方向标志置1指令)
0 S% G( j) r1 R; S  STD(方向标志位置1指令)  D, A. |. Y1 N0 C( h$ G
  CLI(中断标志置0指令)/ s* e: W8 |; E7 u" z
  STI(中断标志置1指令)
/ u( b3 F  h1 k, }2 T  NOP(无操作)
% c/ B5 d( I+ r) M% u% c  ^  HLT(停机)5 C" F" Z2 t2 L6 x+ W' ~/ X
  WAIT(等待)) A  l! k% B3 `, E- J! x( a
  ESC(换码)% |) D8 f: |- y0 p$ L9 }
  LOCK(封锁) - ^! Y; d' p! ?2 [
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 11:16 , Processed in 0.147197 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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