求解:Cpu执行的指令来自内存,那内存中的指令来自哪里?如何产生?
发布网友
发布时间:2024-09-30 18:41
我来回答
共2个回答
热心网友
时间:2024-10-14 09:15
来自应用程序,应用程序将指令写入内存。
热心网友
时间:2024-10-14 09:15
程序执行的过程:
1、写好一个程序,经过编译、链接后会生成一个可执行文件,在linux平台下是ELF(Executable Linkable Format)格式的,windows平台下是PE(Portable Executable)格式的。
2、然后你执行这个可执行文件,这个可执行文件里面的代码段、数据段和BSS段会被加载到PC或者某设备的内存中。代码段里放的就是指令,所以内存里的指令是通过执行某可执行文件加载到内存里的。
3、CPU会从代码段的起始地址,调用第一条指令,开始执行。如果没有遇到跳转指令就顺序执行:假设代码段起始地址是0x100,那么就是先执行0x100这个地址里的指令,然后再执行0x104、0x108地址里的指令。如果遇到跳转指令,就跳转到相应地址,取指令,继续执行。如此往复,完成了整个程序的运行。
4、有些指令,比如add rD,rA,rB。需要去rA和rB寄存器里取值。rA和rB寄存器里的值来自哪里?来自内存里的数据段、BSS段或者栈里或者堆里。说白了,程序就是靠执行一条条执行运行起来的,而指令执行所需的数据放在数据段、BSS段、栈或者堆里。
5、数据加载到数据寄存器的过程:CPU先去数据cache里找这个数据,如果找到了就直接从数据cache加载到数据寄存器里,如果找不到的话就只能再去内存里找。然后就是cache把刚才找到的这个数据缓存起来。
6、另外,CPU读数据的时候,cache的工作很简单,就是缓存。如果是写数据的话,cache就分为write though和wirte back两种不同的工作方式了。此外,CPU发出的地址都是逻辑地址,必须经过MMU模块把逻辑地址转换为物理地址才能正确访问内存。
7、注意,CPU执行指令的时候,也是从指令寄存器里取指令的,并不是直接跑到内存里去取指令,因为这样太慢了。指令加载到指令寄存器的过程和加载数据是类似的。