以下是来自b站小甲鱼汇编讲解中个人对CPU运行流程的理解,因为看到很多人说对CPU流程图突然就懵了不理解,所以说一下自己的怎样理解的:
首先我们先要知道mov和jmp指令的格式:
(1)mov:是数据传送指令,也是最基本的编程指令,
用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)
传递数据到寄存器:mov ax,0000 //把0000传送到ax寄存器去
寄存器间传递数据:mov ax,bx //把bx中的值传送到ax去
(注:mov在数据与寄存器间传递为3个字节,寄存器间传递是两个字节)
(2)jmp:是汇编语言中的无条件跳转指令。无条件跳转指令可转到
内存中任何程序段
同时修改CS和IP的值:jmp 段地址:偏移地址
例:jmp 1000H,0003H //此时CS=1000H,IP=0003H
只修改IP的值: jmp 某一寄存器
例:jmp ax //此时CS 不变 ,IP = ax中的值
注:CS为代码段寄存器
IP为指令指针寄存器
执行的顺序结果为:
(1)mov ax,6622H
(2)jmp 1000:3
(3)mov ax,0000
(4)mov bx,ax
(5)jmp bx
(6)mov ax,0123H
最后又跳回第三步循环下来
一开始我们知道此时CS=2000H,IP=0000H
(1)此时告诉编译器去执行段地址为2000H偏移地址为0000H上的指令
,通过地址加法器得到的物理地址为:20000H;此时就执行mov ax,6622H
执行后因为数据与寄存器间传递是三个字节的,因此IP加3执行下一条指令(2)此时的CS = 2000, IP = 0003H,经地址加法器得到物理地址为:20003H;此时执行
jmp 1000:3
此时CS = 1000H; IP = 0003H(3)此时CS = 1000H; IP = 0003H ;通过地址加法器相加得到物理地址为:10003H,此时执行
mov ax,0000
这里是把0000送到ax寄存器中,CS的值没有变,IP值执行完指令后加3
此时CS=1000H,IP = 0006H(4)此时CS=1000H,IP = 0006H通过地址加法器相加得到物理地址10006H,此时执行
mov bx,ax
把ax中的值送到bx中,CS值没变,IP值执行完指令后加2(寄存器间传递加2)
此时CS=1000H,IP=0008H(5)此时把CS=1000H,IP=0008H通过地址加法器相加得到物理地址10008H,此时执行
jmp bx
这里只修改IP的值(不懂得看上面得jmp指令格式),因此CS值不变,IP值变为bx中的值
CS=1000,IP=0000H(6)此时CS=1000,IP=0000H通过地址加法器相加得到物理地址10000H,此时执行
mov ax,0123H
把0123H的值送入ax寄存器中,执行完该指令后CS不变,IP加3
CS = 1000H,IP= 0003H最后又从第三步开始执行,执行到最后第六步以后又会跳到10000H物理地址执行里面的指令(即最后会一直循环在物理地址为10000H-10009H间)