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

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

[教程] 汇编语言指令集

[复制链接]
发表于 2013-1-4 11:29:49 | 显示全部楼层 |阅读模式
汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。3 J' U8 \2 F9 B) v
一、数据传输指令1 L# @: U1 U, x! ?, U% u
  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。  2 B" V/ \& _" H3 F1 }
 1. 通用数据传送指令   # a' U1 U4 d% H* P- Z; S! ^6 M
MOV 传送字或字节.   
5 R" A. l! `* Y% HMOVSX 先符号扩展,再传送.   , j8 C7 x6 v6 `* ^0 B
MOVZX 先零扩展,再传送.   , ]' f5 _. s7 {
PUSH 把字压入堆栈.   3 ]- p1 i$ h) w8 N) I% E* b9 ^
POP 把字弹出堆栈.   
: w/ y6 h3 j+ y% n1 z; BPUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.   8 t. V$ G( }. _4 {5 F
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.   , W- q# @5 Q4 [6 Q6 G
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.   7 M7 Z* @" _* E0 ^  a
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.   
5 \1 Y! ~0 [( J5 g9 j4 P& tBSWAP 交换32位寄存器里字节的顺序   ) f. `" A! `$ Q) I
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)   
. n1 K0 C0 o6 T6 C, {CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )   - y5 }1 c( B! {# z$ l9 K" _! }- v
XADD 先交换再累加.( 结果在第一个操作数里 )   , r3 O1 w  m# h9 H; z# h. w
XLAT 字节查表转换.   , E. @5 [+ h* |3 d$ [
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即   0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )   
. b' h$ S8 c  J- h  i& K8 N
3 H* b3 n  V$ M' V2. 输入输出端口传送指令.   
/ V+ g* w& l1 @7 N6 aIN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )   
' ~* B( k/ p+ [0 zOUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )   
# F3 K$ C  T0 a; S& X# h3 ^输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,   其范围是 0-65535.   6 ?- w; R8 j8 @5 q; |; h! i
; p4 u" m2 y" J1 ~+ {  O
3. 目的地址传送指令.   ) ^6 O  {9 V' d/ k
LEA 装入有效地址.   例: LEA DX,string ;把偏移地址存到DX.   
. e# e: m/ ]$ K$ `. WLDS 传送目标指针,把指针内容装入DS.   例: LDS SI,string ;把段地址:偏移地址存到DS:SI.   
) A* o9 G5 K: b' i5 s5 ]LES 传送目标指针,把指针内容装入ES.   例: LES DI,string ;把段地址:偏移地址存到ESI.   / f5 \' B6 b( T7 R/ n- o( d
LFS 传送目标指针,把指针内容装入FS.   例: LFS DI,string ;把段地址:偏移地址存到FSI.   9 u0 i! W% ?! L
LGS 传送目标指针,把指针内容装入GS.   例: LGS DI,string ;把段地址:偏移地址存到GSI.   
6 P9 n$ G8 x# U1 wLSS 传送目标指针,把指针内容装入SS.   例: LSS DI,string ;把段地址:偏移地址存到SSI.   
: n# \( o9 z+ v( z1 ^7 e" K9 y/ ]  R; B
4. 标志传送指令.   
) D) H; ?- `& ?% d6 e& g  ?LAHF 标志寄存器传送,把标志装入AH.   ( M8 v5 b* H3 ?, c& G; h3 H7 [
SAHF 标志寄存器传送,把AH内容装入标志寄存器.   
+ ]: H. N. w# f: O  j: ?PUSHF 标志入栈.   2 p. Z" t# t- w/ I1 X4 R
POPF 标志出栈.   - E, Y( _: l! n0 I8 e
PUSHD 32位标志入栈.   
: Q$ S7 n: A- [1 yPOPD 32位标志出栈.
' X3 e8 X, Q3 X, A% j9 |* J0 J二、算术运算指令" D0 G! n4 V: h  }- J

- v( }- U5 }3 P5 V  ADD 加法.
- L/ ]3 R1 @* F8 h  ADC 带进位加法.$ ?6 m3 s4 E! k' |' E4 W
  INC 加 1.* @  U9 R- Z  @
  AAA 加法的ASCII码调整.3 }* ^( I; D. P+ N
  DAA 加法的十进制调整.( ^' W4 ~1 ]( }2 D( F
  SUB 减法.
4 T: U& u/ B( N7 j% s  SBB 带借位减法.
( n7 k# T( N" `4 B  DEC 减 1.. {* Z6 `& E! l; r
  NEC 求反(以 0 减之).* K! u* Q1 P$ O( W9 R5 ~* l
  CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).: l  K! H9 f! _
  AAS 减法的ASCII码调整.) d3 K& t) P& |$ i  ?, w7 U
  DAS 减法的十进制调整.
8 Q! Z6 \  N1 U) P  MUL 无符号乘法.
6 k. @$ Z, o5 R0 F, W  IMUL 整数乘法.
5 l! R: k& g1 b' m4 A; q  以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),7 C! y8 {$ T% G* J9 i
  AAM 乘法的ASCII码调整.
" \* b, A, K. j( d" E1 X& c& |  DIV 无符号除法.- @' g( G) ^, N
  IDIV 整数除法.& o( C. [* G+ ^; G/ {# z9 I6 I5 P/ x
  以上两条,结果回送:
# ?% X4 r; f9 X; l  ^: ^0 i. N  商回送AL,余数回送AH, (字节运算);7 c' N- w. G! V" C5 q1 k" U
  或 商回送AX,余数回送DX, (字运算).
' g" L- Q- d: |( F, Z  AAD 除法的ASCII码调整.
* F* F, [* \' X4 k6 C, W( W  CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)
$ Q6 l" {% p  a7 `  CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)
$ Q: a" H8 T) d9 G' X  CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
% E* b6 d5 w& i: r  Z  CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) . v! F; H' W4 [+ Z4 z- Q
三、逻辑运算指令/ w, x4 [) _7 p& u6 U& T

/ {+ v6 h8 z3 J4 H/ A8 {  AND 与运算.
0 K1 {  M# g, _  a, D. M+ ?1 P# r  or 或运算.4 k0 \( @( H; \( b
  XOR 异或运算.  L) ?" T6 a( w
  NOT 取反.
8 j2 D8 z, V( t$ s" u  TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
! s! z9 E7 @& H, U/ s6 A  SHL 逻辑左移.
4 X% y9 v. @; ?0 j9 l  Z1 ]& `  SAL 算术左移.(=SHL)( T5 o. b* e4 f% T2 Q* k% ]% }
  SHR 逻辑右移.- |# c2 m3 g9 q$ w& u# g5 W  z
  SAR 算术右移.(=SHR)( ~$ v  Y6 \+ l
  ROL 循环左移.. S" f2 s% _( \' C8 ]! ?: ~1 a
  ROR 循环右移.+ N2 |* v* T* W4 z6 v* d" H* x, v2 X% I
  RCL 通过进位的循环左移.( F3 D5 y: D( U- P% x0 {$ Z
  RCR 通过进位的循环右移.
; j( I2 C; u6 q- H. b8 ^+ f3 k  以上八种移位指令,其移位次数可达255次.  ?) w& [; N* R2 B9 w% [$ A
  移位一次时, 可直接用操作码. 如 SHL AX,1.; x* F+ g9 f: v" z0 i9 Z
  移位>1次时, 则由寄存器CL给出移位次数.% |& x# d( }( _' N. z1 Q6 K+ b
  如 MOV CL,04! y, L6 b0 X/ D7 s$ ]5 g4 t' w
  SHL AX,CL
/ Q3 b; K) b! l四、串指令2 j' D  ?$ Q- l2 m. ~, P" s8 w& n

7 F! c( ?2 F- g! a/ m2 J  DS:SI 源串段寄存器 :源串变址.4 e. |! N/ H0 \. y; Y0 e
  ESI 目标串段寄存器:目标串变址.
4 [% T! i% H. k. x  CX 重复次数计数器.6 ?. }; P/ F7 k" e9 o& Z# |  W4 r
  AL/AX 扫描值., W- G7 K+ Q, l
  D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
# I+ o3 g. o% g0 L6 u. @9 Z! s) r0 Q  Z标志 用来控制扫描或比较操作的结束.
  b+ r, p& P3 M. f# b  MOVS 串传送.& L4 z8 H5 B8 ^8 R& `
  ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )- m5 J: R( L* q. G3 M
  CMPS 串比较.# M1 |: F' y" q2 Z! ]0 _# L5 q5 B. i
  ( CMPSB 比较字符. CMPSW 比较字. )
* J& Z1 A, d) p! n* t  SCAS 串扫描.
$ f7 A3 R6 c& r3 Z2 a2 N  把AL或AX的内容与目标串作比较,比较结果反映在标志位.* T+ K  e' f: }
  LODS 装入串.# Q* c) a2 {# _$ l6 c
  把源串中的元素(字或字节)逐一装入AL或AX中.' \! H/ {3 q1 D' V* h# D) e
  ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
$ }7 N9 j5 N# K8 c  STOS 保存串.. H( s) ^5 }2 Z2 i( A5 }  ^
  是LODS的逆过程.+ f1 E7 {# F! {: I+ |  S) F; w
  REP 当CX/ECX<>0时重复.
, u; N; j6 f2 i. O- }5 w$ ?, @9 t  REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.6 R* @( X% q# U. x6 E, H* k4 T! p
  REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
3 b. H" o* x5 T6 y3 |5 Q5 ~" g  REPC 当CF=1且CX/ECX<>0时重复.8 S( ^. a, a2 F5 A. {  v2 L$ T
  REPNC 当CF=0且CX/ECX<>0时重复. 1 c' R6 F2 e! V' O! R" y. x
五、程序转移指令
* g, j( }6 r9 i/ g. u
3 h2 v1 l( `8 S
  1>无条件转移指令 (长转移)/ a; @  r1 E3 d/ }
  JMP 无条件转移指令. W2 k, @* s! \7 n+ G
  CALL 过程调用
! K! S0 }. |$ @  RET/RETF过程返回.
. T5 h# z4 m0 u& W1 N  2>条件转移指令 (短转移,-128到+127的距离内)
% }: ?7 \# Z4 h% _; K( j  ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )4 c1 c* h; T' Q  t3 ~
  JA/JNBE 不小于或不等于时转移.
+ C$ R$ p- C. l0 W  JAE/JNB 大于或等于转移., t) b4 h  e' h8 x% x
  JB/JNAE 小于转移.
. j7 _$ U5 S5 u& H" ~0 f) p* h  JBE/JNA 小于或等于转移.
. {1 I# f2 J! N, q1 c  以上四条,测试无符号整数运算的结果(标志C和Z).' g$ ~6 {- {. o& t$ R  _7 _
  JG/JNLE 大于转移.0 Q* G* a% ?6 o6 r( _- r
  JGE/JNL 大于或等于转移.5 W& o% |% V5 F' \& K3 ]
  JL/JNGE 小于转移.$ c+ ^9 b5 J7 H! V' V8 P7 B
  JLE/JNG 小于或等于转移.+ s: o  D; r2 B
  以上四条,测试带符号整数运算的结果(标志S,O和Z).' @) R$ w1 V; _) V. I
  JE/JZ 等于转移.8 f: W2 P! |0 W
  JNE/JNZ 不等于时转移.
8 \; {' a) c) O  G" S; P  JC 有进位时转移.  J5 `8 m4 B3 ~! |4 `' H( A- @* G0 B
  JNC 无进位时转移.
% ]2 h8 Z$ B. C. E5 N* G/ G/ U  JNO 不溢出时转移.7 \7 T% s6 w9 d! w+ \; i$ o
  JNP/JPO 奇偶性为奇数时转移.6 h8 x3 ]# F6 L! ?- F% X
  JNS 符号位为 "0" 时转移.. M! e( P: X6 g9 D" ?' W
  JO 溢出转移.
4 k' I. q* t. N$ K  JP/JPE 奇偶性为偶数时转移.% b% ^3 N2 X, g. G/ T5 U+ c( k" d3 l% `
  JS 符号位为 "1" 时转移./ c; G: |6 i; l
  3>循环控制指令(短转移): i' {" O! L7 n9 H8 G6 B) n
  LOOP CX不为零时循环.
  n( m0 f+ }0 t5 z. |' S( a  LOOPE/LOOPZ CX不为零且标志Z=1时循环.3 r. w& S! C8 M8 u; Y* ~
  LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.# c, }; p! a; ^8 E( u8 Q7 L) A
  JCXZ CX为零时转移.# m& ^: c! A. W$ l& x& m5 y
  JECXZ ECX为零时转移.) D. ^# a0 D0 h$ L( C/ Y
  4>中断指令3 b, O8 i' g+ k! K8 W4 l% F& c
  INT 中断指令
  }  `9 b3 T* Q6 o  INTO 溢出中断" h, n2 o  e  ]; D9 ]- ]7 `# i
  IRET 中断返回5 `5 r, N% o7 ]- j: D2 N
  5>处理器控制指令) d, Z+ ?* I) ~0 Z
  HLT 处理器暂停, 直到出现中断或复位信号才继续.
/ A  f( [% U- R( K1 M  WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
: K# P- U3 I" o! Y8 ?# Q  ESC 转换到外处理器.7 K( X$ C! G3 N- B0 }
  LOCK 封锁总线.# T+ k5 k: E5 Q9 ~+ M
  NOP 空操作.7 p9 S, h0 {) E3 \
  STC 置进位标志位.! a5 S: n% O  k7 J
  CLC 清进位标志位.
6 R+ B7 i- E2 U/ W8 i  CMC 进位标志取反.
; Z& p+ x: r5 D3 f9 i0 h: ]  STD 置方向标志位.* L# x8 J9 b0 B" e7 |
  CLD 清方向标志位.0 M' e' e# P8 V& a* }) w, R1 H
  STI 置中断允许位.9 r" ~! `3 N- a7 R, r
  CLI 清中断允许位. $ M& }" x5 c& o3 J( g" O8 y! w
六、伪指令
4 j6 J5 N  I% V9 r

: U# @- l) U( O3 P8 G  DW 定义字(2字节).
4 d9 Q7 K4 F2 f  PROC 定义过程.
) j. q0 i: U0 l) h  ENDP 过程结束.1 E: T* k. [# J: p* A0 i8 W: j
  SEGMENT 定义段.! g, B$ X$ f* |! |
  ASSUME 建立段寄存器寻址.7 ]7 V, E6 ~9 u4 b
  ENDS 段结束.
9 ?8 H4 J& p* E: f4 h  END 程序结束.
' }" W8 v, d' ^7 F' ]' `$ g  七、处理机控制指令: % e. T7 q/ p$ C# ?9 x
  标志处理指令 CLC(进位位置0指令)8 `5 b% }( e1 N7 Q2 R0 \
  CMC(进位位求反指令): Y# |& q  I4 a. r* p
  STC(进位位置为1指令)
7 Q- t; A6 s& ]8 f# x- T  G  CLD(方向标志置1指令)) ^7 u# Q0 `8 x! V2 y
  STD(方向标志位置1指令)
) O+ z) `- }8 a* g' k% m. m6 N5 T9 l  CLI(中断标志置0指令)% A+ r4 E' K, S5 n1 k, L3 i
  STI(中断标志置1指令)% g. q7 F- |6 }" q/ j$ t: r; O
  NOP(无操作)) f. Z: Q2 y" `' [
  HLT(停机)
/ s* z- ~! ]  a  WAIT(等待)
' y* @: ]( {" X0 @  E' H5 u  ESC(换码)
+ t" w; N; x7 c' k. g  LOCK(封锁)
7 h  h5 M  ?: z9 U* |
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-20 11:38 , Processed in 0.115712 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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