在處理器中,數據,地址和指令如何區分?當一個程序被執行時,處理器如何區分指令,當所有的東西都在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