我知道它們是唯一可以用于間接尋址的暫存器,但我找不到解釋為什么我不能同時使用這些對。
為什么機器不能支持這樣的尋址模式[si di]?
uj5u.com熱心網友回復:
看一下編碼。
大多數 8086 指令采用兩個運算元,一個必須是暫存器,另一個可以是暫存器或記憶體運算元 (r/m)。8086 使用一個位元組,稱為 ModRM 位元組,來指定運算元。其中3 位是reg欄位,指定 8 個通用暫存器中的哪一個構成暫存器運算元。2 位是mod欄位,用于選擇 r/m 運算元是暫存器,還是無位移、8 位位移或 16 位位移的記憶體運算元。其余三位是r/m欄位。因此,您已經看到只有 8 種暫存器組合是可能的。
r/m 欄位的高位選擇是使用一個暫存器還是兩個暫存器尋址模式。所以如果選擇兩個暫存器,我們就剩下兩個位來選擇哪兩個暫存器,所以只有四種組合是可能的。它們的編碼方式是讓兩個位中的較高位選擇 BX 或 BP,而較低位選擇 SI 或 DI。這導致了您所知道的四種組合。低位不能同時為 0 和 1,因此不能同時具有 SI 和 DI。
不要忘記 8086 及其指令編碼是在 1970 年代后期設計的。如果設計人員想要提供更大的靈活性,他們將不得不使用一個位元組無法容納的更復雜的編碼方案。這意味著代碼會更大(1978 年每兆位元組的記憶體成本約為 20,000 美元)并且 CPU 將需要更多的晶體管(8086 只有 29,000個),從而增加了成本。
1985 年 32 位 80386 發布時,它確實有更靈活的尋址方式;添加了另一個位元組(SIB 位元組),它允許在有效地址中使用一個或兩個通用暫存器的任意組合,并對其中一個應用可選的移位。然而,386 的晶體管數量是 8086 的 10 倍,而在這 7 年中,記憶體價格下降了約 50 倍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437345.html
