通用寄存器可用於傳送和暫存數據,也可參與算術邏輯運算,並保存運算結果。除此之外,它們還各自具有一些特殊功能。彙編語言程序員必須熟悉每個寄存器的一般用途和特殊用途,只有這樣,才能在程序中做到正確、合理地使用它們。
表2.1 通用寄存器的主要用途
寄存器的分類 | 寄存器 |
主 要 用 途 |
|
通
用 寄 存 器 |
數據
寄存器 |
AX |
乘、除運算,字的輸入輸出,中間結果的緩存 |
AL |
字節的乘、除運算,字節的輸入輸出,十進制算術運算 |
||
AH |
字節的乘、除運算,存放中斷的功能號 |
||
BX |
存儲器指針 |
||
CX |
串操作、循環控制的計數器 |
||
CL |
移位操作的計數器 |
||
DX |
字的乘、除運算,間接的輸入輸出 |
||
變址 寄存器 |
SI |
存儲器指針、串指令中的源操作數指針 |
|
DI |
存儲器指針、串指令中的目的操作數指針 |
||
變址 寄存器 |
BP |
存儲器指針、存取堆棧的指針 |
|
SP |
堆棧的棧頂指針 |
||
指令指針 |
IP/EIP | ||
標誌位寄存器 | Flag/EFlag | ||
32位
CPU的 段寄存器 |
16位CPU的
段寄存器 |
ES | 附加段寄存器 |
CS | 代碼段寄存器 | ||
SS | 堆棧段寄存器 | ||
DS | 數據段寄存器 | ||
新增加的 段寄存器 |
FS | 附加段寄存器 | |
GS | 附加段寄存器 |
|
寄存器AX和AL通常稱爲累加器(Accumulator),用累加器進行的操作可能需要更少時間。累加器可用於乘、除、輸入/輸出等操作,它們的使用頻率很高; |
寄存器BX稱爲基地址寄存器(Base Register)。它可作爲存儲器指針來使用; | |
寄存器CX稱爲計數寄存器(Count Register)。在循環和字符串操作時,要用它來控制循環次數;在位操作中,當移多位時,要用CL來指明移位的位數; | |
寄存器DX稱爲數據寄存器(Data Register)。在進行乘、除運算時,它可作爲默認的操作數參與運算,也可用於存放I/O的端口地址。 |
它們主要用於訪問堆棧內的存儲單元,並且規定: |
|
BP爲基指針(Base Pointer)寄存器,用它可直接存取堆棧中的數據; | |
SP爲堆棧指針(Stack Pointer)寄存器,用它只可訪問棧頂。 |
CPU內部的段寄存器: |
|
CS——代碼段寄存器(Code Segment Register),其值爲代碼段的段值; | |
DS——數據段寄存器(Data Segment Register),其值爲數據段的段值; | |
ES——附加段寄存器(Extra Segment Register),其值爲附加數據段的段值; | |
SS——堆棧段寄存器(Stack Segment Register),其值爲堆棧段的段值; | |
FS——附加段寄存器(Extra Segment Register),其值爲附加數據段的段值; | |
GS——附加段寄存器(Extra Segment Register),其值爲附加數據段的段值。 |
實方式: | 前4個段寄存器CS、DS、ES和SS與先前CPU中的所對應的段寄存器的含義完全一致,內存單元的邏輯地址仍爲“段值:偏移量”的形式。爲訪問某內存段內的數據,必須使用該段寄存器和存儲單元的偏移量。 |
保護方式: | 在此方式下,情況要複雜得多,裝入段寄存器的不再是段值,而是稱爲“選擇子”(Selector)的某個值。段寄存器的具體作用在此不作進一步介紹了,有興趣的讀者可參閱其它科技資料。 |