汇编语言程序设计-钱晓捷(第五版)第一章-汇编语言基础知识
1.1 8086的寄存器
處理器內部需要高速存儲單元,用于暫時存放程序執行過程中的代碼和數據,這些存儲單元被稱為寄存器(Register)。
通用寄存器:在處理器中數量較多、使用頻率較高,具有多種用途。例如,它們可用來存放指令需要的操作數據,可用來存放地址以便在主存或I/O接口中指定操作數據的位置。
專用寄存器:只用于特定目的。例如,8086的指令指針寄存器IP只用于記錄將要執行指令的主存地址,標志寄存器保存指令執行的輔助信息。
8086的寄存器組分成8個通用寄存器(AX累加器、BX基址寄存器、CX計數器、DX數據寄存器、SI源地址寄存器、DI目的地址寄存器、BP基址指針、SP堆棧指針)、4個段寄存器(CS代碼段寄存器、SS堆棧段寄存器、DS數據段寄存器、ES附加段寄存器)、1個標志寄存器(FLAGS)和1個指令指針寄存器(IP),它們均為16位。
1.2 8086的尋址方式
(1)立即數尋址方式
在立即數尋址方式下,指令中的操作數直接存放在機器碼中,緊跟在操作碼之后。立即數尋址方式常用來給寄存器或存儲單元賦值。
(2)寄存器尋址方式
寄存器尋址方式的操作數存放在CPU的內部寄存器REG中,可以是8位寄存器R8(AH、AL、BH、BL、CH、CL、DH、DL)或者16位寄存器R16(AX、BX、CX、DX、SI、DI、BP、SP)。另外,操作數可以存放在4個段寄存器SEG(CS、DS、SS、ES)中。
執行上述兩條指令之后,結果是BX = 1234H。
(3)直接尋址方式
在直接尋址方式下,指令中直接包含了有效地址。
該指令中給定了有效地址2000H,它不是存儲器的物理地址。在默認情況下,有效地址要與數據段寄存器DS一起構成操作數所在存儲單元的物理地址。在匯編語言中,用[]表示存儲單元的內容。
該例指令的執行結果是將DS:[2000H]單元的內容傳送至AX寄存器。
數據不僅可以存放于數據段中,也可以根據需要存放于附加段、代碼段或堆棧段中,這時指令中應指明段超越前綴,例如:
(4)寄存器間接尋址方式
在這種尋址方式中,有效地址存放在寄存器中,8086中寄存器只能是基址寄存器BX或變址寄存器SI、DI中。其默認的段地址在DS段寄存器中,但可使用段超越前綴改變。例如:
該指令中有效地址存放于SI寄存器中,操作數則存放在數據段主存單元中。假設SI內容設置為2000H,則該指令等同于MOV AX, [2000H]。
(5)寄存器相對尋址方式
在寄存器相對尋址方式下,有效地址是寄存器內容與有符號8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。操作數的EA = BX/BP/SI/DI + 8/16位位移量。其中,BX、SI、DI寄存器默認數據段DS,BP寄存器默認堆棧段SS。當使用非默認段時,可用段超越前綴。
(6)基址變址尋址方式
基址變址尋址方式是把一個基址寄存器(BX或BP)的內容加上變址寄存器(SI或DI)的內容構成有效地址EA。這樣,操作數的EA = BX/BP + SI/DI。若基址寄存器使用BX,其默認段為數據段DS,若基址寄存器使用BP,其默認段為堆棧段SS。
(7)相對基址變址尋址方式
相對基址變址尋址方式也使用基址寄存器(BX/BP)和變址寄存器(SI/DI),還在指令中指定一個8位或16位的位移量,這三者之和構成操作數的有效地址EA,即EA = BX/BP + SI/DI + 8/16位位移量。
總結
以上是生活随笔為你收集整理的汇编语言程序设计-钱晓捷(第五版)第一章-汇编语言基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: updatebyprimarykeyse
- 下一篇: python模型_python 模型的释