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

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

[教程] 汇编语言指令集

[复制链接]
发表于 2013-1-4 11:29:49 | 显示全部楼层 |阅读模式
汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
  A& g( T( S$ p( W一、数据传输指令
% ~" S1 w2 Q7 G" n5 _( d- M. C& X: y4 ]
  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。  
& U" a- o9 Q1 v+ }, w 1. 通用数据传送指令   # a; M! J6 ~0 g+ D1 N9 u
MOV 传送字或字节.   
/ \6 n% A5 f3 S: P: _, S- R0 R7 H4 YMOVSX 先符号扩展,再传送.   # z  F( o, g9 q2 L$ |* ^
MOVZX 先零扩展,再传送.   
+ p2 I5 C* v/ uPUSH 把字压入堆栈.   - d. X2 }6 C  ?/ D
POP 把字弹出堆栈.   $ c  M4 f' r' S1 _6 O; e
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.   $ o- o* V" V+ U  V
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.   
+ r! A5 p. T# GPUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.   4 D; ]" X4 e- n! H
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.     Q+ R: `) @" R" c/ f
BSWAP 交换32位寄存器里字节的顺序   3 _; |" e  ]& W$ Q7 Q
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)   
' M' m/ u# z) hCMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )   . A5 K( W- m( |6 [& ]( h0 r
XADD 先交换再累加.( 结果在第一个操作数里 )   
, h& V9 s7 J0 o, `XLAT 字节查表转换.   ! N. S: X) B. r- ~
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即   0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )   ; T. x( T* [. _" u6 m) I" Z0 w
* x" t; l/ k; M3 _* H& W& t
2. 输入输出端口传送指令.   
2 L, R) X0 ~7 S- SIN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )   ' L1 f8 V9 Q3 S( I; y" Q
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )   
2 u) G2 f3 Y. B3 d' V" j9 v- u输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,   其范围是 0-65535.   
- S# Y0 z5 i9 l: e! E: w5 f# H  N9 |! y! ?& R; U* b0 y
3. 目的地址传送指令.   
$ f& ~& H( Z* f; S% D% v. fLEA 装入有效地址.   例: LEA DX,string ;把偏移地址存到DX.   
) b" _% \, X6 r3 O- l; t  w$ DLDS 传送目标指针,把指针内容装入DS.   例: LDS SI,string ;把段地址:偏移地址存到DS:SI.   
7 a& D* R3 H3 [/ O8 LLES 传送目标指针,把指针内容装入ES.   例: LES DI,string ;把段地址:偏移地址存到ESI.   
) R- w, H/ r5 E9 A, W9 G3 c/ ~( _LFS 传送目标指针,把指针内容装入FS.   例: LFS DI,string ;把段地址:偏移地址存到FSI.   2 ~0 w4 m! E5 k2 m1 Q# V
LGS 传送目标指针,把指针内容装入GS.   例: LGS DI,string ;把段地址:偏移地址存到GSI.   
* G: e/ |  _( LLSS 传送目标指针,把指针内容装入SS.   例: LSS DI,string ;把段地址:偏移地址存到SSI.   8 p6 Y+ }7 ]  f0 j# R
+ R1 L! S  \0 I! Z
4. 标志传送指令.   
, G% U2 G& r) L2 |* T( A. r# R4 _% bLAHF 标志寄存器传送,把标志装入AH.   2 U- f/ f8 d, i  O/ \, a" t% \7 P; d
SAHF 标志寄存器传送,把AH内容装入标志寄存器.   6 m! J. C+ }, `( m
PUSHF 标志入栈.   8 A# u& X5 Y. a8 I
POPF 标志出栈.   4 i: z1 |4 P2 O" X% m
PUSHD 32位标志入栈.   # [5 \0 O( |6 K+ W6 [
POPD 32位标志出栈.
. P8 N; l8 f2 {% K. I二、算术运算指令
6 ~# v" N1 W6 l: y
! d+ {/ [) U& Y5 i* G% ]  a; o
  ADD 加法., a3 n6 x' ~  C! f
  ADC 带进位加法.. l: M' W1 u% l: U4 k1 O
  INC 加 1.
# j# K$ J2 v1 G7 w  AAA 加法的ASCII码调整.
+ u- n  t3 \4 c0 X' N$ Z) U; D  DAA 加法的十进制调整.8 |  n$ v. i3 o4 t
  SUB 减法.' B* O: \& R' S; s( D) \# u
  SBB 带借位减法.# n: s. w" u; J. |8 Y/ k4 W$ b8 `$ z
  DEC 减 1.3 B2 \2 T7 Z4 k0 y5 k$ K, r+ m9 l
  NEC 求反(以 0 减之).# a9 g$ L+ p/ c3 E4 G- Q1 C
  CMP 比较.(两操作数作减法,仅修改标志位,不回送结果)./ g1 R+ S, u7 A
  AAS 减法的ASCII码调整.
3 |& h, s  r+ V) \7 O  DAS 减法的十进制调整.; M, ?# n/ l' R) {* D+ T# ?8 w- W/ V
  MUL 无符号乘法.4 g& H, t% c4 z$ s- s
  IMUL 整数乘法.. f# q% J7 n: |, k* P5 v3 L
  以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
2 A* i0 ^3 c( p9 q' A1 A2 u' \  AAM 乘法的ASCII码调整.; [# b. m5 r4 Y6 Y$ |3 Y
  DIV 无符号除法.
3 _* r1 ]5 p( g& T  IDIV 整数除法.% P- z) `! a) H4 N+ N0 ?# I
  以上两条,结果回送:
' M3 B- u3 C" G: [2 _3 U: p  Z  商回送AL,余数回送AH, (字节运算);( n2 n0 ~, u! v% i* G- b' j
  或 商回送AX,余数回送DX, (字运算).
7 I, M% C$ }$ k4 k" w  AAD 除法的ASCII码调整.
' R( V) ]/ U5 U9 y  CBW 字节转换为字. (把AL中字节的符号扩展到AH中去). z% ~7 Y3 a/ I
  CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)
$ }! J) ^4 w* N% r; |; `* Z; R  CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)* B1 r5 p4 `  |: z3 |7 k6 K% f0 P8 G1 w
  CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
6 M5 S4 ?/ ]9 h" j三、逻辑运算指令" n) }* H4 B6 ]6 z- i  Y+ P
  y9 G$ X0 d( q  M- p
  AND 与运算.' P0 ^- h$ S% z6 [1 G- H% b* D
  or 或运算.4 u9 X' I$ j, a8 w0 i" r
  XOR 异或运算.& G8 W0 n9 X/ x2 k7 z
  NOT 取反.
( W" n/ [( c" L; M/ \  TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
" _& C( t8 ?" q* S  SHL 逻辑左移.
  V6 H5 U% ?; Q9 h% m8 B/ I5 {$ f  SAL 算术左移.(=SHL)
- u% x2 b0 g2 l- r5 ^$ ]8 T/ O  SHR 逻辑右移.
; K4 f' `; M! _$ B( X- Q  SAR 算术右移.(=SHR)1 O! ^6 d+ h' Y% C/ O3 O+ l6 o
  ROL 循环左移.
$ [% B$ h' f2 f! F( }  ROR 循环右移.
7 n3 f" a0 G7 M7 d+ ?  RCL 通过进位的循环左移.
& Y- @+ {$ j6 ~6 ~0 _3 `$ F% H  RCR 通过进位的循环右移.* k- R0 a9 X+ o8 m
  以上八种移位指令,其移位次数可达255次.
, |: t, n4 S" H+ N3 l" i  移位一次时, 可直接用操作码. 如 SHL AX,1.
# }" w  D9 L$ c/ c! e9 M  移位>1次时, 则由寄存器CL给出移位次数.
" Z7 c  V; v# c. ]  如 MOV CL,04
& L- g3 u( W: }1 F) D6 ]  SHL AX,CL
4 F( m0 o" z. r; f: M  B+ ?' U四、串指令7 _7 p9 p% m* w3 x9 L

& {$ n  s  L' U; z& @& b  DS:SI 源串段寄存器 :源串变址.& x3 n( [3 H3 X! `. F5 m
  ESI 目标串段寄存器:目标串变址.
; |. N' |, p' V" Y& T7 ]& _  CX 重复次数计数器.: l" C" M% J$ v/ L7 B4 d
  AL/AX 扫描值.
; R6 g9 w+ }6 ?# @1 l  D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.; }( q$ n2 Z( n" T- R" J
  Z标志 用来控制扫描或比较操作的结束.
8 H9 A. Q: z4 g( |5 f  MOVS 串传送.
# ^1 n5 O. A& ?+ W, b& P  ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
: \; h0 z, _6 x4 o  CMPS 串比较.. L5 z, m1 U8 y: J% v1 V
  ( CMPSB 比较字符. CMPSW 比较字. )- A5 A3 t- f! q& w( G" q- }
  SCAS 串扫描.
" R  O1 p2 F2 `. a! [2 ?: F. q  把AL或AX的内容与目标串作比较,比较结果反映在标志位.3 O; f+ e! N# j" z# j9 q3 h3 j
  LODS 装入串.
. b# H. Q, }+ {" S* V7 z  把源串中的元素(字或字节)逐一装入AL或AX中.  Y  G$ j/ h" C6 G# R
  ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ). t, V9 y& d' K! J" l! Z
  STOS 保存串.5 G% y! O" E( H) d: O
  是LODS的逆过程., }4 ]# r" e9 j! x* ?4 }( t# v
  REP 当CX/ECX<>0时重复.; u; Y5 \- ^* R9 T# l0 N
  REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.# \7 C9 {# ~1 K$ w
  REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
7 j9 x( _) ^. b9 J  REPC 当CF=1且CX/ECX<>0时重复.3 c4 Y3 u, y+ j5 y3 X- P" E
  REPNC 当CF=0且CX/ECX<>0时重复. " f0 l" v8 ~5 L0 {4 R4 @  T
五、程序转移指令
5 A7 k6 v- _; y: J# ^  u
/ n! t% ?$ Q4 Y3 v8 R# D. E4 B
  1>无条件转移指令 (长转移)# t* |, {- [3 I( G
  JMP 无条件转移指令9 t5 A8 X* i) S$ y0 E9 ~
  CALL 过程调用8 b! B' `. O) n# c/ t' W
  RET/RETF过程返回.
3 O/ }: S; ?( i5 x( h- a. ]  2>条件转移指令 (短转移,-128到+127的距离内)" A& U% A: ?1 U* [* T4 O5 Y, e
  ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )' A: U1 S% P- d) a$ G: K; P0 c% g
  JA/JNBE 不小于或不等于时转移." ~1 X) Z7 i8 R
  JAE/JNB 大于或等于转移.
. w& }# p7 R- s  V  |  JB/JNAE 小于转移./ k% a0 a( ?8 n5 _# y# s
  JBE/JNA 小于或等于转移.
9 \% h' g; x7 M+ t! B  以上四条,测试无符号整数运算的结果(标志C和Z).
/ ]  k( _: G9 O, j  B" z  JG/JNLE 大于转移.) P: N+ K! C; N" ~1 ^5 u
  JGE/JNL 大于或等于转移.
, T) G# C0 l/ k5 Z; n, O  JL/JNGE 小于转移.
; q+ L% m: ^" x. C' i" p5 f  JLE/JNG 小于或等于转移.
2 J# _& [% x- e7 W  以上四条,测试带符号整数运算的结果(标志S,O和Z).! w3 A' p7 o  x7 }+ [
  JE/JZ 等于转移.. q3 G& i; H5 E9 g/ q
  JNE/JNZ 不等于时转移.. K) Y- G9 S- d' x2 M4 K
  JC 有进位时转移.
8 u9 A. U. k) \& W& {1 T1 r  JNC 无进位时转移.
3 B6 e# ?; _8 x4 Y% \( \  JNO 不溢出时转移.
2 w/ I& m4 V- V& z  JNP/JPO 奇偶性为奇数时转移.
: A: r* L4 y" G* e6 [: T' Y  JNS 符号位为 "0" 时转移.+ O5 ]4 I$ d& ?. R+ L+ C) ?
  JO 溢出转移.
- G( ?* w" b$ y7 K  JP/JPE 奇偶性为偶数时转移.
( D3 e' }3 ~: h+ M# J4 i* v  JS 符号位为 "1" 时转移.  i. B& V- K+ ~0 ]" |+ Z
  3>循环控制指令(短转移)3 t& C' J/ Z2 E" B  N& ?3 R" ^
  LOOP CX不为零时循环.$ C- ~4 g) `) [/ L# R
  LOOPE/LOOPZ CX不为零且标志Z=1时循环.
1 h$ g) n* F) L. v" M  LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.& p& }$ l3 t2 X, K
  JCXZ CX为零时转移.
$ ~3 l7 o4 E$ a+ X. Z  JECXZ ECX为零时转移.% f' y( E: p0 q7 {  A  J
  4>中断指令. a" g2 _7 r, W6 t% {6 s( u
  INT 中断指令, y' _6 c& @. J9 m6 q( L+ [1 ^& X
  INTO 溢出中断2 Q1 Y. B, l9 H3 y. i% ~6 s+ V
  IRET 中断返回
0 d2 G0 y5 h4 Y* E/ b  5>处理器控制指令$ r6 p$ y; D, T7 q+ ]) z+ P
  HLT 处理器暂停, 直到出现中断或复位信号才继续.' e0 d+ s+ f" X- g; ^0 N
  WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
; P+ v: W: v1 Y: p  ESC 转换到外处理器.
- L- {, L1 R/ o  F3 K  LOCK 封锁总线.* t, ], T# y% I1 ~1 e
  NOP 空操作.
2 _* o$ l2 T# G* z5 R, O" H7 W2 J  STC 置进位标志位.* W4 r( k1 M1 j0 g2 g7 g# O4 e
  CLC 清进位标志位.0 F/ P0 C9 k$ f4 A2 j0 T9 K! O
  CMC 进位标志取反./ M9 \  L) I1 i& U+ R
  STD 置方向标志位.
# V9 Z$ s) y7 s# {- k) N  CLD 清方向标志位.+ T$ a; @9 U' k. N; l( A# R
  STI 置中断允许位.# a; Y* }- Y" ^2 p. F
  CLI 清中断允许位. 8 D+ c; \  ?5 S% {+ Q
六、伪指令( b+ p0 N1 ?3 }
, ~" U3 \! q$ Y3 x# E+ u6 S
  DW 定义字(2字节).
; v5 ?* E( g0 Z- {( g  PROC 定义过程.5 O! K) z; e- t
  ENDP 过程结束.$ x8 O' L1 Q% g' B3 n! G2 I
  SEGMENT 定义段.6 I4 q$ m- I: D: N
  ASSUME 建立段寄存器寻址.
2 Y2 Z9 D, O2 u; V# P% M  u8 U  Q  ENDS 段结束.
7 y8 Y! D" W' s) Q" T  END 程序结束.
4 n+ t/ F) p& ?  I& C0 c  七、处理机控制指令: , x* p: `* w, X& l
  标志处理指令 CLC(进位位置0指令)# m4 N2 S  x* ]  Z) _5 [+ H
  CMC(进位位求反指令)! j9 i+ N/ k  [) ], X8 ^
  STC(进位位置为1指令)
/ H! k$ Q% R: i  CLD(方向标志置1指令)
# x6 `$ D- I( z% m( O/ o- @6 |  STD(方向标志位置1指令)( m( v/ C/ ^# H6 b1 F8 U
  CLI(中断标志置0指令)
: M. ~' ]. E1 q# L" `: n  STI(中断标志置1指令). f3 x6 B. z! u8 d& |0 J& O& p6 e  B
  NOP(无操作)
% I4 `8 V4 V2 {  HLT(停机)0 O2 I* l1 O1 u) x) T& [
  WAIT(等待)0 s# V, p6 O+ Q: G' L
  ESC(换码)& Z" Z6 t* i6 A. `* t/ b) `9 V6 A; h( b
  LOCK(封锁)
3 g! C! i' }& G+ s
后期资源网,打造没有广告、免除隐藏回复的全开放式影视技术交流平台。 你的所求就是我们服务的宗旨!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-19 17:09 , Processed in 0.124568 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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