8086CPU的尋址方式


機器語言與匯編語言

機器語言能被計算機硬件直接識別並執行,它由二進制代碼組成。

機器語言中的每一條 稱為指令,計算機能夠識別的所有指令的集合稱為指令系統。

指令是計算機能夠執行的最小 功能單位,機器語言程序就是由一條條的指令按一定順序組織起來的指令序列。

計算機的 CPU 不同,指令系統也不同。INTEL 公司的 80X86 系列 CPU,因其硬件結構設計上的包容 性,指令系統具有兼容性,用 8088/8086CPU 的指令系統設計的程序可以在 80X86 系列的 CPU 上執行。8088/8086CPU 的指令系統常被稱為 80X86 系列 CPU 的基礎指令。

一條指令一般由操作碼和操作數兩部分組成。機器語言中操作碼和操作數都是二進制代碼,因而難於記憶、 書寫和輸入,即使對於計算機的設計者也一樣難於使用。因此,對指令中的操作碼和操作數 用便於記憶的符號代替,編程語言因而有了第一次發展。

匯編語言是一種符號語言。用匯編語言編制的程序稱為匯編語言源程序,計算機不能直 接識別執行,必須翻譯成機器語言程序。翻譯的過程稱為匯編,完成匯編工作的程序稱為匯 編程序。匯編程序屬於系統程序,是匯編語言的命令處理程序。

機器語言和匯編語言統稱為低級語言

3.2 8086CPU 尋址方式

1. 立即尋址

操作數是立即數,可以是 8 位或 16 位的二進制數,也可以是字符常數。立即數作為操作數,這個操作數的尋址方式稱為立即尋址,其實它不用尋址。

MOV  AX, 2000H  ;2000H 是立即數操作數 

注意:立即數操 作數只能作源操作數,不能作為目的操作數。

2. 直接尋址

操作數在內存中,指令中直接給出操作數所在的內存單元的偏移地址。可以是數值形式 的地址,也可以用符號表示。

MOV  BL, [2000H]
MOV BX, [3200H]   //將偏移地址為3200H為首地址的連續兩個內存單元的內容傳送給BX寄存器。

匯編語言中常常用一個符號代替數值,如 BUFF 代替 3200H.BUFF 稱為符號地址。BUFF 需要在程序開始處予以定義.

MOV  BX, [BUFF]  ;或寫為  MOV  BX, BUFF 

注意:,CPU 讀寫內存時使用段基址和段內偏移地址,上面指令中的[2000H]和[3200H],都是段內偏移地址。在通常情況 下,存儲器操作數的默認在數據段,段基址在 DS。

如果操作數的段基址不是 DS 段,指令要特別說明。例如在 ES 段,指令應書寫為:

MOV   BL, ES:[2000H] 

這種用法稱為段超越,邏輯地址為 ESX10H+2000H。

3. 寄存器尋址

操作數在 CPU 內部的寄存器中。

ADD  AX, BX  ;源和目的操作數的尋址方式都是寄存器尋址。 

4. 寄存器間接尋址

操作數在內存中,內存單元的偏移地址存放在寄存器中。

MOV  AX, [SI]  ;操作數[SI]的尋址方式為寄存器間接尋址。取出連續兩個內存單元的數據傳送給AX 

注意:8086CPU 中能夠作為寄存 器間接尋址方式使用的寄存器只有 4 個:BX、BP、SI、DI。。BP 在作為間址寄存器時, 段基址默認為 SS;其它 3 個的默認段基址為 DS。但都可以段超越。例:

MOV  DX, ES:[DI] 

5. 寄存器相對尋址

操作數在內存中,內存單元的偏移地址一部分由間接尋址寄存器提供,一部分是指令給 定的 8 位或 16 位地址位移量,二者相加形成操作數的有效地址。

MOV   AX, [BX+DATA]   ;將以BX+DATA為首地址的連續兩個內存單元的 數據傳送給 AX。 
//書寫方式很靈活,下面都是正確的
MOV  AX, [BX]+DATA 
MOV AL, 20H [SI]   
MOV  CX, DATA [DI] 
MOV DX, DATA+ [BP]  

這種尋址方式可用於存取數據表中的數據,用間址寄存器存放數據表首地址,地址位移 量指明要存取表中的哪一個數據,可以方便地存取數據表中的任何數據。

6. 基址變址尋址

操作數在內存中,基址寄存器和變址寄存器相加作為操作數的偏移地址。

MOV  AX, [BX][SI]  ;將 BX+SI 為首地址的連續兩個內存單元的數據送給 AX。

注意:8086CPU 中寄存器 BX 和 BP 為基址寄存器, SI 和 DI 為變址寄存器。這種尋址方式中, 一個基址寄存器加一個變址寄存器構成操作數,操作數的形式只有 4 種:

[BX][SI] 
[BX][DI]
[BP][SI]
[BP][DI] 

基址變址尋址方式的主要用途是尋址存儲器數組中的元素。將數組的首地址裝入基址寄 存器,而把要存取的元素的序號存入變址寄存器中,通過修改變址寄存器的內容來訪問數組 中的各個元素,它比寄存器相對尋址更加靈活

7. 基址變址相對尋址

操作數在內存中,操作數的地址由基址寄存器加上變址寄存器再加上地址位移量構成。

MOV  AX, DATA[BX][SI] 
MOV  AX, [BP][DI] DATA 
指令也可以書寫為:
MOV  AX, [DATA+BX+SI] 
MOV  AX, [DATA+BX][SI] 
MOV  AX, DATA[BX+SI] 

這種尋址方式主要用於二維數組操作。地址位移量作為數組首地址,基址寄存器尋址行, 變址寄存器尋址列,可以很方便實現數據陣列檢索。

8. 隱含尋址

MUL  BL  ;AL 乘以 BL,結果存在 AX 中。   
MOVSB  ;把 DS:SI 指明的內存單元的數據傳送到 ES:DI 指明的內存單元 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM