汇编学习(五)

102 阅读1分钟

CPU 是如何区分数据和指令的?

u 指令:将某个内存地址,开始的字节全部当作指令 d 指令:将某个内存地址,开始的字节全部当作数据

8086 CPU 中,在任意时刻,CPU 将 CS 和 IP 所指向的内容,全部当作指令来执行。

在内存中数据和指令没有任何区别!都是二进制信息。CPU 只有工作的时候才将有的信息当作指令,有的信息当作数据。

image.png

用 e 指令修改内存中的数据,用 r 指令修改 cs 和 ip,去执行上面这段代码

// 修改内存的数据
-e 2000:0
-r cs
-r ip

ip 寄存器和指令的关系

指令是有长度的,一条指令可以由多个字节组成。

指令的执行过程

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

为什么要先改 IP,再执行?

练习

-a mov ax, 1000
mov bx, 1000
mov dl, 10

jmp 指令练习

image.png

jmp 会改变当前的 段地址寄存器:偏移地址寄存器

如果只传了一个值,就是改变了偏移地址寄存器

指令执行过程设计的原因

call 转移指令:将当前执行的下一条指令的地址保存起来。(保存在哪里?)

ret 转移指令:将之前保存的指令恢复到 IP 寄存器中。

image.png

image.png

image.png