汇编语言-CPU如何区分指令和数据

CPU如何区分指令和数据

1.问题引出

由于指令和数据均是以二进制形式主要存储与内存中,因此,CPU需要对所读取内存中的内容加以区分。为了解决CPU是如何区分指令和数据的问题,我们引入段地址寄存器CS和偏移地址寄存器IP

2.CS和IP

CS和IP是8086CPU中两个关键的寄存器,它们指示了要读取指令的地址。其中CS为段寄存器,IP为指令寄存器。
现在,设任意时刻CS中的内容为M,IP中的内容为N,8086CPU将从物理内存地址为M×16+N单元开始,逐个读取指令并执行。

3.指令执行过程

  1. CPU从CS:IP所指向的内存单元读取指令,放入指令缓存器中;
  2. IP= IP+ 所读指令的长度,从而指向下一条指令;
  3. 执行指令缓存器中的内容,回到步骤一

上述指令执行过程 设计的目的是为了实现 CALL指令

4.修改CS:IP指令

1.jmp指令: jmp 段地址:偏移地址 可同时修改cs、ip中的内容,该指令的功能为:用指令给出的段地址修改CS,偏移地址修改IP。

jmp 2000:0010,   执行指令后:CS=2000H,IP=0010H,CPU将从20010H处读取指令

2.jmp指令仅修改IP的内容: 形如"jmp 某一合法寄存器"的指令可完成仅IP内容的修改。

#设原有CS=037F, IP=0000,执行下述指令:
mov ax,1000H    
jmp ax
#执行指令后:CS=037F,IP=1000H

5.示例演示:

以下实验使用DOSBox和debug工具进行演示。
1.使用e指令修改2000:0000内存处的机器码,修改CS和IP地址,使用CPU执行相应机器码。
在这里插入图片描述
彻底否定在这里插入图片描述
在这里插入图片描述在这里插入图片描述
2.CPU是如何执行指令的
通过实际编写指令,深入理解CPU指令执行的过程。

下面三条指令执行后,CPU几次修改了IP?分别在什么时候修改了IP?最后IP的值为多少
mov ax,bx
sub ax,ax
jmp ax
分析:
mov ax,bx    --存方指令到寄存器中—>修改IP—>执行指令
sub ax,ax     --存方指令到寄存器中—>修改IP—>执行指令
jmp ax   --存方指令到寄存器中—>修改IP(IP=IP+指令长度)—>执行指令—>修改IP(jmp指令修改)

答案:
CPU 4 次修改了IP;
见分析;
IP最终值为 IP=0 

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

6.参考资料

1.王爽老师的《汇编语言》;
2.哔哩哔哩视频讲解:https://www.bilibili.com/video/BV1mt411R7Xv?p=47

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值