8086 8088暫存器BX,書上寫是基址暫存器,這個基址指的是什麼,程式裡用BX一般都是放偏移位址?

時間 2021-05-05 18:19:46

1樓:北極

BX叫Base Register應該算是乙個歷史問題了。

早年8086彙編設計的時候,四個通用暫存器是有不同的意義的:

AX叫Accumulator Register,翻譯成累加暫存器

CX叫Count Register,翻譯成計數暫存器

DX叫Data Register,翻譯成資料暫存器

BX叫Base Register,翻譯成基址暫存器

注意:正確的排序是AX CX DX BX,BX暫存器是排到最後的。

為什麼是叫這些名字:

AX是通用的做計算的計數器。另外,跟別的暫存器不一樣的地方是:凡是操作AL/AX/EAX暫存器的指令,比別的指令都短(或者有單獨一條指令),所以速度更快,我個人的猜測是,早年的時候,能用來做計算的暫存器,可能只有AX這乙個。

CX是用來計數的,指令手冊上都會講,這個暫存器一般用來跟迴圈指令、移位指令配合使用,早年的時候,能做迴圈計數的暫存器只有這乙個。

DX最初是用來儲存計算結果的,比如乘法和除法的結果就在這裡。

BX最初的用途是定址的,在16位彙編模式下,能用來做ModRM暫存器間接定址的,只有BX和BP(BP暫存器被翻譯成Base Pointer暫存器),ModRM中文該翻譯成什麼我也不知道。

在16位模式下,能在間接定址裡做計算的,只有以下幾種組合:

[BX/BP/SI/DI + 立即數]

[BX/BP + SI/DI]

[BX/BP + SI/DI + 立即數]

[BX/BP + SI/DI + 立即數]

[BX/BP + SI/DI*N + 立即數]

[BX/BP + SI/DI*N + 立即數]

這就是Base的含義,BX可以作為基位址+偏移來取得位址然後載入。

到32位以後就沒這種限制了,暫存器的使用場景也沒有原來那麼限制了,所以現在已經很少有人把BX叫做基址暫存器了。

2樓:Sinaean Dean

只是那麼個叫法,也許cpu設計者的確希望他有乙個特殊角色,但設計上它和其他通用暫存器沒有差別,使用上大家也都把他當普通暫存器用。名稱似乎不重要,實際應用中沒人因為他的名字給他特殊地位。

可能一些軟中斷方式的呼叫中他的確有慣用法。

3樓:void

CPU內部的硬體構造中,有多個暫存器組,對應不同的可操作CPU的指令使用,有些是用於系統級程式設計,有些是應用層程式設計資源,通用暫存器組是其中一種硬體資源,可以先去學習了解下這些構造模組,後續學習中印證理解。

通用暫存器組中的暫存器,根據使用約定了一些暫存器的專門用途,這些約定規則,慢慢編寫就會了。

基址和偏移是CPU用來計算乙個位址,這個位址是記憶體位址,這麼做的目的之一是用暫存器可表示的位址範圍,經過轉換可以生成更大範圍的記憶體位址。

學習彙編不要離開對應的處理器官方指令文件,如自學能力較強,會了彙編基本語法後,後面去學習研究下指令集文件吧

4樓:BlueWanderer

BX的B就是Base的縮寫。對於乙個位址[BX + 4],從指令角度說BX叫基址,4叫偏移量。哪怕從程式邏輯上其實4是乙個變數的絕對位址,BX存的是乙個偏移量。

JMP指令的轉移位址是暫存器定址或暫存器間接定址時,基本操作是什麼?

rayhunter jmp 有兩種常見的定址,一種是間接定址,一種直接定址。間接 jmp relN,彙編指令運算元 EB,E9 RIP RIP offset,間接定址,不直接設定PC值,將當前PC值加上一定的偏移量 直接 JMP r m,彙編指令運算元,FF 直接定址,設定PC的值,不是加乙個偏移量...

現代CPU的暫存器以及暫存器檔案是怎麼做的,應該不是D觸發器做的吧?

超級飛俠 籠統的說,看暫存器的多少而定。有些處理器的暫存器很多,很可能使用RAM來實現 有些比較少暫存器的會傾向於用觸發器實現。至於暫存器檔案 這個概念隱含有比較多的memory空間 幾乎沒有使用觸發器來實現的。這種情況下,相比RAM,DFF占用的物理面積太大,功耗太大了。晶元的成本直接跟面積相關。...

暫存器堆(register file)是什麼?

櫻木花道 暫存器堆 register file 是CPU中多個暫存器組成的陣列,通常由快速的靜態隨機讀寫儲存器 SRAM 實現。這種RAM具有專門的讀埠與寫埠,可以多路併發訪問不同的暫存器。CPU的指令集架構總是定義了一批暫存器,用於在記憶體與CPU運算部件之間暫存資料。在更為簡化的CPU,這些架構...