CPU 是如何区分数据和指令的?
u 指令:将某个内存地址,开始的字节全部当作指令 d 指令:将某个内存地址,开始的字节全部当作数据
8086 CPU 中,在任意时刻,CPU 将 CS 和 IP 所指向的内容,全部当作指令来执行。
在内存中数据和指令没有任何区别!都是二进制信息。CPU 只有工作的时候才将有的信息当作指令,有的信息当作数据。
用 e 指令修改内存中的数据,用 r 指令修改 cs 和 ip,去执行上面这段代码
// 修改内存的数据
-e 2000:0
-r cs
-r ip
ip 寄存器和指令的关系
指令是有长度的,一条指令可以由多个字节组成。
指令的执行过程
- CPU 从 CS:IP 所指向的内存单元读取指令,存放到指令缓存器中。
- IP = IP + 所读指令的长度,从而指向下一条指令。
- 执行指令缓存器中的内容,回到第一步。
为什么要先改 IP,再执行?
练习
-a mov ax, 1000
mov bx, 1000
mov dl, 10
jmp 指令练习
jmp 会改变当前的 段地址寄存器:偏移地址寄存器
如果只传了一个值,就是改变了偏移地址寄存器
指令执行过程设计的原因
call 转移指令:将当前执行的下一条指令的地址保存起来。(保存在哪里?)
ret 转移指令:将之前保存的指令恢复到 IP 寄存器中。