X86汇编4.基本指令详解

最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。

数据:
[bx]:eg. mov ax,[bx],表示bx寄存器中的数据作为一个偏移地址EA,段地址SA默认在D中,将SA:EA内存单元中的数据存入AX

x ptr: x表示:word、byte,eg. mov word ptr ds:[0],1

start标号:指定程序运行起始地址

伪指令:
1.segment...ends伪指令
格式:
XXX segment ;定义一个一个段开始,名称为XXX
XXX ends ;定义一个段结尾,名称为XXX
释义:segment...ends指令对,定义一个段XXX。

2.end
释义:end是一个汇编程序结束的标志。

3.assum
释义:表示假设,它假设某一段寄存器和程序中的某一个sgment...ends定义的段相关联,上面示例assume cs:codesg就是将代码段codesg和CPU中的段寄存器cs联系起来。

4.数据定义伪指令
dw:定义数据类型,定义字型数据,如:dw 0123H, 0456H, 0789H
db:定义ASCII码数据,eg. db 'unix'
dd:定义双字型数据
dup:数据复制,db 3 dup (0),定义三个字节,都是0,相当于:db 0,0,0

指令:
1.mov指令
释义:数据传送指令
mov 寄存器, 数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 段寄存器,内存单元

2.add指令
释义:加法指令
add 寄存器, 数据
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器

3.sub指令格
释义:减法指令
sub 寄存器, 数据
sub 寄存器,寄存器
sub 寄存器,内存单元
sub 内存单元,寄存器

4.push指令
释义:压栈指令
push 段寄存器
push 内存地址

5.pop指令
释义:出栈指令
pop 寄存器
pop 段寄存器
pop 内存地址

6.loop指令
释义:循环指令,判断(cx) = (cx) - 1,如果cx的值不为0就跳转到s,如果为0就执行下一条指令。
loop 标号

7.and指令
释义:逻辑与指令,按位进行与计算
and al,立即数

8.or指令
释义:逻辑或指令,按位进行或指令
or ax,立即数

9.div指令
释义:除法指令,除数有8位或16位两种,在一个reg或内存单元中,被除数默认放在AX或DX和AX中,如果除数位8位,被除数则为16位,放在AX中,如果除数位16位,则被除数位32位,在DX和AX中存放,DX存放高16位,AX存放低16位,对于结果,如果除数位8位,则AL作为商,AH存放余数,如果除数位16位,AX作为商,DX存放余数。
div reg
div [...]
div byte ptr ds:[0]
含义:(al) = (ax)/((ds)16 + 0) 的商
(ah) = (ax)/((ds)
16 + 0) 的余数

10.mul指令
释义:乘法指令,注意两点:
(1)两个乘数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL,另一个放在8位寄存器或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中。
(2)结果:如果是8位乘法,结果放在AX中,如果是16位乘法,结果高位默认存在DX中,低位在AX中。
mul reg
mul [...]

11.adc指令
释义:带进位加法指令,它利用了CF标志位
adc 操作对象1, 操作对象2
功能:操作对象1 = 操作对象1 + 操作对象2 + CF

12.sbb指令
释义:带借位减法指令
sbb 操作对象1, 操作对象2
功能:操作对象1 = 操作对象1 - 操作对象2 - cf

13.cmp指令
释义:比较指令
cmp 操作对象1, 操作对象2

14.条件转移指令
je:等于则转移,检测标志位:zf=1
jne:不等于则转移,检测标志位:zf=0
jb:小于则转移,检测标志位:cf=1
jnb:大于等于则转移,检测标志位:cf=0
ja:大于则转移,检测标志位:cf=0且zf=0
jna:小于等于则转移,检测标志位:cf=1或zf=1

15.inc指令
指令格式: inc reg
inc ax ; ax值自增1,相关于C语言的++

猜你喜欢

转载自blog.51cto.com/14207158/2473565
今日推荐