汇编指令小本本

汇编指令小本本

1、 数据传送指令

1.1 mov

传递指令

(1) CPU内部寄存器之间的数据传送,如:mov ah,al
 
(2) 立即数送至通用寄存器(非段寄存器)或存储单元,如:mov al,3        mov [bx],1234h
 
(3) 寄存器与存储器间的数据传送,如:mov ax,var        mov ax,[bx]

注:都是从右向左传递

1.2 xchg

交换指令

xchg OPRD1,OPRD2    OPRD可以是通用寄存器或存储单元,但不包括段寄存器,不能同时是存储单元,不能有立即数

1.3 地址传送

lea

lea ax,[si+2]

lds

lds si,FARPOINTER	; 32位双字变量

les

les reg,oprd

2、 堆栈操作指令

2.1 push

进栈指令

push src	 # 把16位数据src压入堆栈。

2.2 pop

出栈指令

pop dst		# 从堆栈弹出16位数据至dst

3、 标志性操作指令

标志性传送指令

3.1 LAHF

LAHF		# 把标志寄存器的低8位(包括SF(7)、ZF(6)、AF(4)、PF(2)、CF(0))传送到AH指定位

3.2 SAHF

SAHF		# 把寄存器AH的指定位送至标志寄存器低8位(包括SF(7)、ZF(6)、AF(4)、PF(2)、CF(0))

3.3 PUSHF

PUSHF 		# 把标志寄存器的内容(16位)压入堆栈。SP-=2

3.4 POPF

POPF		# 把当前栈顶的一个字传送到标志寄存器。SP+=2

标志性位操作指令

(1) CLC(Clear Carry Flag):                CF置0
(2) STC(Set Carry Flag):                CF置1
 
(3) CMC(Complement Carry Flag):            CF取反
 
(4) CLD(Clear Direction Flag):            DF置0,执行串操作指令时,地址递增
(5) STD(Set Direction Flag):            DF置1,执行串操作指令时,地址递减
 
(6) CLI(Clear Interrupt enable Flag)    IF置0,使CPU不响应来自外部装置的可屏蔽中断,但对不可屏蔽中断和内部中断没有影响
(7) STI(Set Interrupt enable Flag)        IF置1,可以响应可屏蔽中断

4、 加减运算指令

4.1 add

加法指令

add OPRD1,OPRD2		# OPRD1 + OPRD2

4.2 adc

加法另带 CF

add OPRD1,OPRD2 		# OPRD1 + OPRD2 + CF

4.3 inc

自加 1

inc OPRD		# OPRD + 1

4.4 sub

减法

sub OPRD1,OPRD2			# OPRD1 - OPRD2

4.5 sbb

多减一个CF

sbb OPRD1,OPRD2			# OPRD1 - OPRD2 - CF

4.6 dec

自减 1

dec OPRD		# OPRD - 1

4.7 neg

对操作数取补

neg OPRD			# 0 - OPRD

4.8 cmp

判断大小

cmp OPRD1,OPRD2			# 执行OPRD1 - OPRD2,但运算结果不运送到OPRD1,可以一下比较

5、 乘除运算指令

5.1 mul

无符号数乘法指令

mul OPRD			# 将OPRD与AX或AL中的操作数相乘,结果保存在DX:AX中或AX中

5.2 imul

有符号数乘法指令

imul OPRD			# 把乘数和被乘数均作为有符号数进行乘法运算。其余与mul类似

5.3 div

无符号除法指令

div OPRD			# OPRD为除数,被除数存放在DX:AX或AX中,做除法,结果存放在DX:AX(DX存放余数,AX存放商)或AX(AH余数,AL商)。

5.4 idiv

有符号除法指令

idiv OPRD 			# 把除数和被除数看做有符号数做除法,其余与div类似

5.5 cbw

符号拓展指令

cbw 			# 把寄存器AL中的符号位扩展到寄存器AH

5.6 cwd

符号拓展指令

cbw 			# 把寄存器AX中的符号扩展到寄存器DX

6、 逻辑运算和位移运算指令

6.1 not

取反

not OPRD			# 把操作数OPRD取反,然后送回OPRD

6.2 and

& 运算

and OPRD1,OPRD2			# 对两个操作数进行按位逻辑“与”运算,结果送到OPRD1中 

6.3 or

|| 运算

or OPRD1,OPRD2			# 对两个操作数进行按位逻辑“或”运算,结果送到OPRD1中

6.4 xor

^ 运算

xor OPRD1,OPRD2			# 对两个操作数进行按位逻辑“异或”运算,结果送到OPRD1中

6.5 test

检测某些位是否为1

test OPRD1,OPRD2

一般位移指令

6.6 sal/shl

左移

sal OPRD,m
shl OPRD,m			# 把操作数OPRD左移m位,每移动一位,右边用0补足1位,移出的最高位进入标志位CF

6.7 sar

右移

sar OPDR,m			# 操作数右移m位,同时每移1位,左边的符号位保持不变,移出的最低位进入标志位CF

6.8 shr

右移

shr OPRD,m			# 操作数右移m位,同时每移1位,左边用0补足,移出的最低位进入标志位CF

循环位移指令

6.9 rol\ror\rcl\rcr

这些指令只影响CF和OF

rol OPRD,m
ror OPRD,m
rcl OPRD,m
rcr OPRD,m

7、 转移指令

7.1 jmp

jmp OPRD		# 使控制指令无条件转移到OPRD的内容给定的目标地址处。操作数OPRD可以是通用寄存器,也可以是字存储单元
jmp far ptr 标号 		# 使控制指令无条件的转移到标号对应的地址处
jmp OPRD		# 	使控制指令无条件转移到操作数OPRD的内容给定的目标地址处。操作数OPRD必须是双字存储单元

7.2 loop

计数循环指令

loop 标号			# 使转移标号与Loop指令间的指令循环执行CX次

7.3 loope/loopz

等于/全零循环指令

loope	标号
loopz 	标号
# 该指令使CX自减1,若结果不为0,并且ZF=1,则转移至标号,否则顺序执行。注意指令本身实施的CX自减1操作不影响标志

7.4 loopne/loopnz

不等于/非零循环指令

loopne	标号
loopnz	标号
# 该指令使CX自减1,若结果不为0,并且ZF=0,则转移至标号,否则顺序执行。注意指令本身实施的CX自减1操作不影响标志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值