5
A
回答
3
當時的想法是寄存器擴展到32位,而不是創建一個機器與多達16個或8次位寄存器,因爲你已經受夠了那些。爲了保持編碼和硬件的簡單性,他們決定不直接訪問前16位。一切都需要付出代價。有趣的事實:64位擴展帶來的確帶來了r8
- r15
,但是你不能直接訪問它們的前32位。
2
因爲沒有必要。大多數時候你使用完整的註冊表。像AX,AL這樣的低位寄存器主要用於加載/存儲數值,而不是用於計算。現在很難找到AH的用法。
允許訪問這些高端部件需要引入新的操作碼,這將污染已經很緊且混亂的x86操作碼空間。要爲這些指令找到一個免費的操作碼也不是一件容易的事情。此外,單獨訪問寄存器的不同部分將引入更復雜的依賴性,從而給指令調度員帶來更多壓力。這可能是爲什麼most x86_64 instructions zero the upper part of a 32 bit register而不是保存它的原因之一。
相關問題
- 1. 爲什麼我可以mov進入eax,進入ax,但不進入al,甚至可能進入ah?
- 2. x86給出AH和AL計算AX?
- 3. 最高16位的EAX
- 4. 添加值AX寄存器,但使用AH和AL
- 5. 86分寄存器(EAX,AX,AH)是從內存中的數據
- 6. 裝配8088打印AX,BX,AH,AL,BH,BL
- 7. 爲什麼我不能在Cbind()中訪問列名稱R
- 8. 爲什麼我不能在8位和16位積分
- 9. 爲什麼我不能按名稱訪問列?
- 10. 爲什麼鏈接到JCenter的YARG不能通過maven訪問?
- 11. 如何在中斷21 emu8086中寫「ah」而不是「al」?
- 12. 在16位Turbo Pascal中訪問高性能計數器
- 13. 爲什麼我不能在SystemVerilog的邏輯中存儲16位?
- 14. 爲什麼不能通過foreach或get_object_vars訪問PHP mysqli_stmt屬性?
- 15. 爲什麼不能通過JS在本網站訪問元素?
- 16. 爲什麼不能通過docker-compose訪問磁盤?
- 17. 爲什麼`ls -al&; ls -al`無效?
- 18. 爲什麼不能通過jsp include訪問別名模型對象?
- 19. 通過路徑名稱中的變量名稱訪問地圖
- 20. 0(%eax)和(%eax)有什麼區別?
- 21. 爲什麼我不能檢索當前位置的名稱?
- 22. 通過指向32位的結構對齊和訪問兩個16位字段
- 23. 爲什麼HTML表單不能通過名稱爲「submit」的按鈕來提交?
- 24. 爲什麼我不能在表中使用「名稱」來訪問lua函數
- 25. 爲什麼QWidgets通過指針訪問?
- 26. 爲什麼我無法通過名稱使用FindName()訪問文本框?
- 27. Linux上的Masm32:爲什麼mov [bx],ax工作,但mov [ax],bx(或mov [bl],al)不?
- 28. 如何通過名稱訪問根名稱空間 - 而不是簡單的`::`?
- 29. 爲什麼EAX的內容不同?
- 30. 爲什麼我不能訪問爲json
好吧,我改變了我的問題...... – Alexandre 2015-02-10 11:03:26
Rgister訪問器不存在這個特定的目的,因爲它們不存在訪問64位大小寄存器中的高32位。但是您可以經常移動寄存器內容,以便它們完全放入ax中,然後可以再次使用ax訪問器以及ah/al訪問。我總是這樣做。 – icbytes 2015-02-10 11:15:00
如果你問爲什麼高16位沒有名稱 - 這是因爲歷史。要問的正確問題是爲什麼低16位有名稱 - 因爲8086.至於AH - 從8088天開始。英特爾處理器追蹤他們的血統到8088,這是一個8位處理器。 – sashoalm 2015-02-10 11:15:38