汇编专题:寄存器、指令、操作符

寄存器、指令、操作符

数据处理

两类寄存器

寄存器(reg):ax bx cx dx ah al bh bl ch cl dh dl sp bp si di
段寄存器(sreg):ds ss cs es

bx si di bp

他们可以通过[ ]表示数据。
他们可以单独出现或以 bx si,bx di,bp si,bp di这四种组合出现。
bx默认的段地址是ds。
bp默认的段地址是ss。

数据长度

在有寄存器名字时,看寄存器名字。
在没有寄存起名字时 用word ptr表示字(16位)单元,用byte ptr表示字节(8位)单元。
push pop只进行字操作。

div除法指令

除数:8位或16位,放在reg或内存单元中。
被除数:除数8位则被除数16位,在ax中存放。除数16位则被除数32位,在ax和dx中存放,dx存放高16位,ax存放低16位。
结果:除数为8位,al存商,ah存余数。除数16位,ax存商,dx存余数。
格式:div 除数

伪指令dd

dd命令:定义双字节数据。

dd 1

dup操作符

db/dw/dd 重复次数 dup (重复的数据)

转移指令

offset操作符

获取编译器处理符号的偏移地址。
汇编专题:寄存器、指令、操作符

jmp指令

目的地址在指令中

段内短转移:-128~127字节
jmp short 标号
汇编专题:寄存器、指令、操作符段内近转移:-32768~32767
jmp near ptr 标号

段间转移,远转移
jmp far ptr 标号

目的地址在寄存器中

jmp reg

目的地址在数据中

jmp word ptr 数据地址(只取一个字,改变ip)
jmp dword ptr 数据地址(取两个字,高地址是cs,低地址是ip)

jcxz指令

有条件的转移指令,属于段内短转移
格式:jcxz 标号
在cx是0的前提条件下才会执行这条指令

loop指令

循环指令是段内短转移。

CALL 和 RET

ret 和 retf

ret:修改ip的内容,实现近转移
格式:ret
效果:
pop ip

retf:修改cs 和 ip 的内容,实现段转移
格式:retf
效果:
pop ip
pop cs

call指令

目的地址在指令中

段内近转移
格式:call 标号
效果:
push ip
jmp near ptr 标号

段间转移
格式:call far ptr 标号
效果:
push cs
push ip
jmp far ptr 标号

目的地址在寄存器中

格式:call 16位reg
效果:
push ip
jmp 16位reg

目的地址在寄存器中

call word ptr 内存单元地址
效果:
push ip
jmp word ptr 内存单元地址

call dword ptr 内存单元地址
效果:
push ip
jmp dword ptr 内存单元地址

mul乘法指令

相乘的数为8位或16位
如果是8位,就放在 al 和 8位reg或内存字节单元中,结果放在ax中
如果是16位,就放在 ax 和 16位reg或内存字单元中,结果高位在dx中,低位在ax中。
格式:mul reg/内存单元

标志寄存器

他就是flag,他储存的信息被称为程序状态字(PSW)。
汇编专题:寄存器、指令、操作符

标志

ZF标志:零标志位,记录相关指令执行后结果是否为零,结果是零zf=1,不是零zf=0
PF标志:奇偶标志位,记录相关指令执行后结果中1的个数是否为偶数,1的个数为偶数pf=1,为奇数pf=0
SF标志:符号标志位,记录相关指令执行后结果是否为负,结果为负sf=1,非负sf=0
CF标志:进位标志位,(无符号数运算)记录运算结果的最高有效位向更高位的进位值,或借位值。
OF标志:溢出标志位,记录(有符号数)运算的结果是否发生溢出,如果发生溢出of=1,没有溢出of=0

指令

adc指令
带进位加法指令,利用cf位。
格式:adc 操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+cf

sbb指令
带借位减法指令,利用cf位
格式:sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象2-cf

cmp指令
比较指令
格式:cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2 不保存结果
通过标志来判断比较结果
汇编专题:寄存器、指令、操作符

条件转移指令

格式:指令 标号
指令 条件
je : zf=1
jne:zf=0
jb : cf=1
jnb:cf=0
ja : cf=0 且 zf=0
jna:cf=1 或 zf=1

DF标志和串传送指令

DF标志:方向标志位,在串处理指令中,控制si,di增减。df=0 每次操作后si di递增,df=1 每次操作后si di递减

串传送指令

movsb:传送字节
格式:movsb
功能:将ds:si指向的内存单元的字节送入es:di中,然后根据df的值,将si di递增或递减。

movsw:传送字
格式:movsw
功能:将ds:si指向的内存单元的字节送入es:di中,然后根据df的值,将si di递增2或递减2。

几条指令

rep指令:循环指令
格式:rep …
功能:循环执行后面的指令,循环次数取决于cx

cld指令:df=0
std指令:df=1

pushf 和 popf

pushf:将标志存储器数据压栈。
popf:将栈中数据存入标志存储器。

标志存储器Debug中表示

汇编专题:寄存器、指令、操作符

上一篇:汇编命令手册


下一篇:SpringIoC和DI注解开发