CPU各个寄存器作用

程序员的代码最终的实现就是对寄存器和内存进行一些操作,知道CPU中各个寄存器的作用,能够对代码有更深刻的了解。

CPU各个寄存器作用(8086):

CS,IP

当前要读取指定的地址,**任意时刻CPU将CS:IP指向的内容当做指令执行。**在内存中,指令和数据没有任何区别,CPU如何区分指令和数据?CPU将CS:IP指向的内存单元的内容看做指令
CPU执行指令的过程:
CPU执行指令的过程

bx,si,di,bp

可以用在[…]中来进行内存单元的寻址。在[]中这四个寄存器可以单个出现,或者组合:bx和si,bx和di,bp和si,bp和di
一般[]的段地址默认在ds中,但只要在[]中使用bp,指令中没有显性给出段地址,段地址默认在ss中。[]可以显示给出段地址如:es:[bx]。

ss,sp

push,pop指令执行时,CPU从SS和SP中得到栈顶的地址。(栈区低地址是栈顶,高地址是栈底)
在这里插入图片描述

push ax的执行由两步组成
(1)sp=sp-2
(2)将ax中的内容送入ss:sp指向的内存单元处,ss:sp此时指向新栈顶

CX

CPU执行loop指令进行两步操作(1)cx=cx-1(2)判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

div指令

(1)除数:在一个reg或者内存单元中
(2)被除数:默认放在ax或dx和ax中,如果除数为8位,被除数则为16位,默认在ax中存放,如果除数为16位,被除数为32位,在dx和ax中存放,dx存高16位,ax存放低16位。
(3)结果:如果除数为8位,则al存储出发操作的商,ah存储除法操作的余数;如果除数为16位,则ax存储除法操作的商,dx存储除法操作的余数。
在这里插入图片描述

mul指令

在这里插入图片描述

ax,bx,cx,dx总结

ax,dx寄存器与div,mul指令相关默认存放被除数和一个乘数,以及最后存放结果;
bx与内存单元寻址有关可以在[…]中使用;
cx与循环和判断语句相关;

cs,ip;ss,sp;ds,bx;es总结

cs存放指令的段地址,ip存放偏移地址;
ss存放栈的段地址,sp存放偏移地址;
ds存放内存空间的段地址,bx存放偏移地址,还有si,di可以存放偏移地址(也可以使用bp,但此时段地址默认在ss中)
es与串传送指令有关

转移指令

可以修改IP,或同时修改CS和IP的指令统称为转移指令。
在这里插入图片描述

(1)offset

在汇编语言中是有编译器处理的符号,功能是取得标号的偏移地址。
在这里插入图片描述

(2)jmp

无条件转移指令,可以只修改IP,也可以同时修改CS和IP。

2-1 根据位移进行转移的jmp指令

在这里插入图片描述
jmp short 标号(转到标号处执行指令)
这种格式的jmp指令实现的是段内短转移,它对IP的修改范围为-128~127
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2-2 转移的目的地址在指令中的jmp指令

jmp far ptr 标号实现的是段间转移,又称为远转移,功能如下:cs=标号所在段的段地址;ip=标号在段中的偏移地址。

2-3 转移地址在寄存器中的jmp指令

在这里插入图片描述

2-4 转移地址在内存中的jmp指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)jcxz指令:

为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。
指令格式:jcxz 标号(cx=0时,转移到标号处执行。cx不等于0,什么也不做)
操作:当cx=0时。ip=ip+8位位移

(4)call和ret指令

4-1 ret指令用栈中的数据,修改IP的内容,从而实现近转移;retf利用栈中的数据,修改CS和IP的内容,从而实现远转移。

在这里插入图片描述

4-2 call指令,cpu执行call指令进行两步操作:

(1)将当前的IP或CS和IP压入栈中
(2)转移
根据位移进行转移的call指令:
在这里插入图片描述
根据目的地址进行转移的call指令
在这里插入图片描述
转移地址在寄存器中的call指令

在这里插入图片描述

4-3 call和ret的配合使用:两者配合实现子程序的机制

在这里插入图片描述
在这里插入图片描述
从上面的讨论我们发现,可以写一个子程序,在需要的时候,用call指令转去执行。当执行完子程序后,可以在子程序后面使用ret指令,利用栈中的数据设置IP的值,从而转到call指令后面的代码处继续执行。

标志寄存器

一种特殊的寄存器,具有3种作用:
在这里插入图片描述
在这里插入图片描述
ZF标志:记录相关指令执行后,其结果是否为0,如果为0,zf=1,否则zf=0。
PF标志:记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,pf=1,如果为奇数,那么pf=0。
SF标志:记录相关指令执行后,其结果是否为负,如果为负,sf=1,否则sf=0。
CF标志:在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
OF标志:记录了有符号数运算的结果是否发生了溢出,如果发生溢出,of=1,否则of=0。
DF标志:在串处理指令中,控制每次操作后si、di的增减。df=0,每次操作后si、di递增;df=1,每次操作后si、di递减。

adc指令

在这里插入图片描述
adc指令可以对任意大的数据进行加法运算。
在这里插入图片描述

sbb指令

在这里插入图片描述
利用sbb指令可以对任意大的数据进行减法运算。
在这里插入图片描述

cmp指令

在这里插入图片描述

检测比较结果的条件转移指令

在这里插入图片描述

串传送指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pushf和popf

在这里插入图片描述

rep stos

lea     edi,[ebp-0C0h]
mov     ecx,30h
mov     eax,0CCCCCCCCh
rep stos dword ptr es:[edi]

rep指令的目的是重复其上面的指令.ECX的值是重复的次数.
STOS指令的作用是将eax中的值拷贝到ES:EDI指向的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值