爱了爱了,这篇寄存器讲的有点意思( 五 )
?
CS 的全称是 Code Segment , 即代码寄存器;而 IP 的全称是 Instruction Pointer, 即指令指针 。 现在知道这两个为什么一起出现了吧!
?
在 8086 CPU 中 , 由 CS:IP 指向的内容当作指令执行 。 如下图所示
文章插图
说明一下上图
在 CPU 内部 , 由 CS、IP 提供段地址 , 由加法器负责转换为物理地址 , 输入输出控制电路负责输入/输出数据 , 指令缓冲器负责缓冲指令 , 指令执行器负责执行指令 。 在内存中有一段连续存储的区域 , 区域内部存储的是机器码、外面是地址和汇编指令 。
上面这幅图的段地址和偏移地址分别是 2000 和 0000 , 当这两个地址进入地址加法器后 , 会由地址加法器负责将这两个地址转换为物理地址
文章插图
然后地址加法器负责将指令输送到输入输出控制电路中
文章插图
输入输出控制电路将 20 位的地址总线送到内存中 。
文章插图
然后取出对应的数据 , 也就是 「B8、23、01」 , 图中的 B8、BB 都是操作数 。
文章插图
控制输入/输出电路会将 B8 23 01 送入指令缓存器中 。
文章插图
此时这个指令就已经具备执行条件 , 此时 IP 也就是指令指针会自动增加 。 我们上面说到 IP 其实就是从 Code Segment 也就是 CS 处偏移的地址 , 也就是偏移地址 。 它会知道下一个需要读取指令的地址 , 如下图所示
文章插图
在这之后 , 指令执行执行取出的 B8 23 01 这条指令 。
然后下面再把 2000 和 0003 送到地址加法器中再进行后续指令的读取 。 后面的指令读取过程和我们上面探讨的如出一辙 , 这里 cxuan 就不再赘述啦 。
通过对上面的描述 , 我们能总结一下 8086 CPU 的工作过程
- 段寄存器提供段地址和偏移地址给地址加法器
- 由地址加法器计算出物理地址通过输入输出控制电路将物理地址送到内存中
- 提取物理地址对应的指令 , 经由控制电路取回并送到指令缓存器中
- IP 继续指向下一条指令的地址 , 同时指令执行器执行指令缓冲器中的指令
DS 寄存器CPU 在读写一个内存单元的时候 , 需要知道这个内存单元的地址 。 在 8086 CPU 中 , 有一个 DS 寄存器 , 通常用来存放访问数据的段地址 。 如果你想要读取一个 10000H 的数据 , 你可能会需要下面这段代码
mov bx,10000Hmov ds,bxmov a1,[0]
上面这三条指令就把 10000H 读取到了 a1 中 。在上面汇编代码中 , mov 指令有两种传送方式