寄存器:
EAX 累加器.算数运算的主要寄存器
ECX 计数器
EDX数据寄存器
EBX 基址寄存器
ESP 堆栈指针寄存器
EBP 基址指针寄存器
ESI 变址寄存器,原地址指针寄存器,一般与EDS配合使用,有自动增减量的功能
EDI 变址寄存器,目的地址指针寄存器,一般与 EDS 配合使用,有自动增减量的功能
1.ESP EBP ESI EDI 它们可以像数据寄存器一样在运算过程中存放操作数,但它们只能使用16位 。其实他们通常的用途是在段内寻址时提供偏移地址。
2.EDX做双字长运算时把EDX和EAX 组合在一起放一个双字长数,EDX用来存放高位数字
做除余时EDX为余数
6个段寄存器:
标志:
标志寄存器PSW(程序状态字寄存器PSW)
标志寄存器PSW是一个16为的寄存器。它反映了CPU运算的状态特征并且存放某些控制标志。8086使用了16位中的9位,包括6个状态标志位和3个控制标志位。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||
零 标志 |
CF(进CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。
ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。
SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。
OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=1,否则OF=0
PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0
AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0
另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。
TF跟踪标志:该标志位为方面程序调试而设置。若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。
IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。
DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。
寻址方式:moveax,0x1234//立即寻址moveax,ebx//寄存器寻址moveax,[ebx]//寄存器间接寻址mov eax,[0x1234] //直接寻址mov eax,[ebx+0x1234]//寄存器相对寻址mov eax,[esi+edi]//基址变址寻址mov eax,[esi+edi+0x1234]//基址变址相对寻址浮点:FLD:压入浮点寄存器.相当于push但不是压入堆栈,而是压入ST0FSTP:出浮点寄存器.相当于pop.这是一循环,比如用FSTP出浮点寄存器,但ST0的值循环后会存放在ST7中FADD:浮点数相加. st0=st0+浮点数FSUB:浮点数相减. st0=st0-浮点数FMUL:浮点数相乘. st0=st0*浮点数FDIV:浮点数相除. st0=st0/浮点数FILD:装载整数,把整型转成浮点型.与FLD相同,但这个指令一般用于浮点型与整型相运算时才出现CVTTPS2PI:把浮点数截断取整数,并放到通用寄存器中格式:CVTTPS2PI MM0,dqword ptr ptr ss:[ebp]说明:用MMX寄存器当作保存临时的结果.如果是MM0表示存放在eax中,如果是MM1表示存放在ecx中,以此类推逻辑左移:shl 相当于x2逻辑右移:shr 相当于除2算术左移:sal 相当于x2.与shl一样的算太右移:sar相当于除2.与shr的区别是:sar带符号,如果是负数,高位补1.shr只用0填充