首页 > 编程知识 正文

cpu专用寄存器(cpu指令寄存器的作用)

时间:2023-05-05 19:41:07 阅读:74683 作者:1447

程序员代码的最终实现是操作寄存器和内存,了解CPU中每个寄存器的作用,从而更深入地理解代码。

文章目录CPU各寄存器的作用(8086 ):CS、ipbx、si、di、bpss、spcx:div指令: mul指令: ax、bx、CX、dx汇总: cs、IP; ss,sp; ds,bx; es总结:分支指令(1) offset) jmp )2-1移位分支的jmp指令2-2分支目标地址指令中的jmp指令2-3分支目标地址寄存器中的jmp指令2-4分支目标地址存储器中的jmp指令)3) jcxz 4-2呼叫指令,cpu执行呼叫指令,进行两级操作。 4-3呼叫和ret并用:两者合作实现子程序的机制标志寄存器: adc指令sbb指令cmp指令检测比较结果的条件分支指令串传输指令pushf和popfrep stos CPU的各寄存器作用(8086 ) : CS,IP

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

CPU执行指令的过程:

bx、si、di和bp可在[…]中用于寻址内存单元。 在[]中,这四个寄存器可以单独显示,也可以组合显示。 http://www.Sina.com/3358 www.Sina.com /但是,除非在[]中使用bx和si,bx和di,bp和si,bp和di,否则指令没有明确赋予段地址。一般[]的段地址默认在ds中。 可以像es:[bx]那样显示段地址。

执行ss、sp push、pop指令时,bp(堆栈区域的低位地址为堆栈顶部,高位地址为堆栈底部)

推送ax的执行由两个阶段构成

(1) sp=sp-2

)2)将ax内容发送到ss:sp指定的存储器单元,ss3360sp此时指向新的堆栈顶部

CX :判断CPU执行loop命令进行两级操作的(1) cx=cx-1(2)2) CX的值,如果不为零则移动到标签处执行程序,如果为零则向下执行。

div指令: (1)除数:在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 :汇编语言中是编译器处理的符号,功能是获取标签的偏移地址。

) 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)使用呼叫命令和ret命令4-1 ret命令堆栈中的数据修改IP内容,实现近切换; retf利用堆栈中的数据,修改CS和IP的内容,实现远程转移。

4-2呼叫指令、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,30hmov eax,0CCCCCCCChrep stos dword ptr es:[edi]

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。