0
点赞
收藏
分享

微信扫一扫

汇编指令小本本

进击的包籽 2022-04-14 阅读 230

汇编指令小本本

目录

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 ax,[si+2]
lds si,FARPOINTER	; 32位双字变量
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

add OPRD1,OPRD2 		# OPRD1 + OPRD2 + CF

4.3 inc

inc OPRD		# OPRD + 1

4.4 sub

sub OPRD1,OPRD2			# OPRD1 - OPRD2

4.5 sbb

sbb OPRD1,OPRD2			# OPRD1 - OPRD2 - CF

4.6 dec

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

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

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 条评论