在处理器中,数据,地址和指令如何区分?当一个程序被执行时,处理器如何区分指令,当所有的东西都在0时,并且寄存器加载了数据,地址?处理器/寄存器/内存中数据,地址和指令的区别是什么?
回答
当您启动应用程序时,eip(程序计数器)被设置为您的程序的文本数据所在的位置,文本数据就是您的代码(0..1)。从这里开始执行来自eip上的地址的指令。这些指令是在cpu(或缓存)附近的ROM上定义的,如果cpu试图执行某个不是指令的东西,它会引发异常(此级别的中断)。他如何知道它是否是指令,想象得到的foreach指令会检查ROM和散列表以查看它是否是有效的指令。
这是一个非常简单的问题,因为很多事情都发生在XDD上。
处理器只做你告诉它做的事情。正如你所说的,处理器无法区分内存中“数据”和“代码”之间的区别:它只是一个字节序列。这就是你告诉它如何处理那些定义它如何处理的字节。
编译程序时,生成的可执行文件中包含有关于哪些部分是代码以及哪些部分是数据的信息。当程序执行时,操作系统将代码和数据加载到内存的不同部分,然后告诉处理器在程序的入口点开始执行代码。从那里,处理器取出第一条指令,执行它,然后转到下一条指令。
当然,这一切都非常简单,但我认为你明白了。
在较旧的处理器和较旧的操作系统中,没有任何东西阻止您告知处理器开始执行位于数据段中间的指令。或者,实际上,可以通过修改代码段中的“数据”来实现自修改代码。较新的处理器和操作系统通常具有某种形式的数据执行预防和锁定以防止修改代码。否则,自修改代码会成为一个巨大的安全风险。
简短回答:处理器会将代码视为代码,因为您告诉代码。否则,一切都只是内存中的字节。
各种寄存器帮助处理器区分在计算机上执行的进程中的各种内存段。当程序启动时,代码段寄存器(cs)和指令指针(ip/eip/rip)被设置为指向代码的位置,而数据段寄存器(DS)和其中一个通用寄存器(通常是DX )被用来指向数据段。那么主要是Intel x86架构,但总的来说,大多数架构都有寄存器来区分数据区的代码区和堆栈段。通过这些寄存器,CPU可以“知道”或能够在单个答案中区分代码地址
- 1. 寄存器和临时寄存器有什么区别?
- 2. 为什么存储在寄存器中的数据有内存地址?
- 3. 机器指令和内存地址
- 4. vim中的缓冲区和寄存器有什么区别?
- 5. SI和DI寄存器的实际区别是什么?
- 6. 新的X86_64处理器寄存器的名称是什么?
- 7. 处理器寄存器
- 8. MRC命令的附加协处理器寄存器的功能是什么?
- 9. 68k寄存器地址
- 10. PCIe MSI地址寄存器
- 11. 什么是接收器控制寄存器的中断级别
- 12. ESP和EIP寄存器有什么区别
- 13. 为什么地址寄存器后置是(A0)+
- 14. 内存竞技场和内存分配器有什么区别?
- 15. 什么是ESP和EBP寄存器?
- 16. '处理器内核数'和'CPU数'有什么区别?
- 17. 指令DB和AX寄存器
- 18. GDB寄存器与处理器寄存器不同吗?
- 19. 加载到寄存器中的指令
- 20. MIPS:将寄存器地址复制到另一个寄存器
- 21. 内存数据寄存器(MDR)与内存缓冲寄存器(MBR)
- 22. OpenCL中本地和全局内存区别有什么区别?
- 23. 什么寄存器指向堆?
- 24. 处理器(CPU)和微处理器有什么区别?
- 25. 为什么没有处理器有不对称寄存器?
- 26. 寄存器和指针
- 27. 86分寄存器(EAX,AX,AH)是从内存中的数据
- 28. EBX寄存器用于内存访问的模式是什么?
- 29. autofac中的寄存器处理程序
- 30. 为什么指向16位寄存器的指针是uword?
? – 2010-12-14 19:44:57