




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1. 匯編指令是什么?匯編指令是什么?2. 機器如何也去尋指?機器如何也去尋指?3. 指令中的操作數在哪兒存放?指令中的操作數在哪兒存放?4.機器又是如何去尋數?機器又是如何去尋數?5. 為什么要有尋址方式?為什么要有尋址方式?Questions? 本章重點本章重點代碼段寄存器代碼段寄存器數據和堆棧段寄存器數據和堆棧段寄存器匯編語言指令格式匯編語言指令格式指令的尋址方式指令的尋址方式存儲器尋址存儲器尋址3.1 匯編語言指令 3.1.1 機器指令機器指令 機器指令也稱作代碼指令。它是計算機能識機器指令也稱作代碼指令。它是計算機能識別的一組二進制代碼。別的一組二進制代碼。例例1 用機器指令實現將用
2、機器指令實現將7加加3的結果存入的結果存入5號字節單元的操號字節單元的操作。作。 1011 0000 0000 0111 B B007H 把數把數“7”送到送到AL中。中。 0000 0100 0000 0011B 0403H 把數把數“3”與與AL內容相加,結果放在內容相加,結果放在AL中。中。 1010 0010 0101 0000 0000 0000B A25000H 把把AL中的內容送到地址為中的內容送到地址為5的存儲單元中。的存儲單元中。共需要三條機器指令實現。共需要三條機器指令實現。機器指令可以用二進制表示也可以用十六進制機器指令可以用二進制表示也可以用十六進制表示,指令的長度也可
3、以不一樣。如前兩條指表示,指令的長度也可以不一樣。如前兩條指令的長度為令的長度為2字節,第三條指令的長度為字節,第三條指令的長度為3字節。字節。 用匯編指令實現將用匯編指令實現將7加加3的結果存入的結果存入5號字節單元號字節單元的操作。的操作。 MOV AL,7 ADD AL,3 MOV DS:5,AL 3.1.2 匯編指令匯編指令1、指令格式、指令格式 匯編指令由操作碼字段和操作數字段構成。匯編指令由操作碼字段和操作數字段構成。操作碼字段操作碼字段 操作數字段操作數字段例例1 單操作數指令(一地址指令)單操作數指令(一地址指令) INC AX ;加;加1指令。指令。 INC BL ;加;加1
4、指令。指令。 PUSH AX ;進棧指令。;進棧指令。 JMP LA1 ;無條件轉移指令。;無條件轉移指令。例例2 雙操作數指令(兩地址指令)雙操作數指令(兩地址指令) MOV AX,5 ;傳送指令。;傳送指令。 ADD AX,BX;加法指令。;加法指令。目的操作數目的操作數源操作數源操作數例例3 三操作數指令(三地址指令)三操作數指令(三地址指令) IMUL EBX,ESI,7 ;乘法指令。(;乘法指令。(80386機器指令)機器指令)例例4 無操作數指令(零地址指令)無操作數指令(零地址指令) CBW ;字節轉換為字指令;字節轉換為字指令 CLC;進位標志;進位標志CF清零清零 NOP ;
5、不操作指令;不操作指令 HLT;停機指令;停機指令2指令屬性指令屬性(1)指令長度)指令長度根據指令的功能不同,指令的根據指令的功能不同,指令的長度也不一樣(以字節為單位)。分為單字節指長度也不一樣(以字節為單位)。分為單字節指令、雙字節、三字節、四字節和多字節指令等。令、雙字節、三字節、四字節和多字節指令等。(2)指令的執行時間)指令的執行時間指令的執行時間(以指令的執行時間(以CPU時鐘周期為單位)也是一個重要的屬性。它會時鐘周期為單位)也是一個重要的屬性。它會影響程序的執行速度,因此采用較少執行時間的影響程序的執行速度,因此采用較少執行時間的指令可提高程序的運行速度。指令可提高程序的運行
6、速度。 3.1.3 指令系統指令系統1指令系統定義指令系統定義計算機所能執行的各種代碼指令的集合。計算機所能執行的各種代碼指令的集合。2指令的分類指令的分類8086的指令共分為六大類。分別是:的指令共分為六大類。分別是: 數據傳送指令數據傳送指令算術運算指令算術運算指令邏輯運算指令邏輯運算指令字符串處理指令字符串處理指令控制與轉移指令控制與轉移指令處理機控制指令處理機控制指令見附錄見附錄A3.1.4匯編指令舉例 數據傳送指令數據傳送指令 Mov指令指令 算術運算指令算術運算指令 Add指令指令 Sub指令指令 邏輯運算指令邏輯運算指令 字符串處理指令字符串處理指令 控制與轉移指令控制與轉移指令
7、 處理機控制指令處理機控制指令3.2指令的存取指令在什么地方?指令和數據有區別嗎?怎么取下一條指令?怎么取數據?CS和IP 是8086CPU中最關鍵的寄存器,它們指示了CPU當前要讀取指令的地址。CS代碼段寄存器 存放代碼的段地址;IP指令指針寄存器 存放代碼的偏移地址。3.2指令的存取3.1.1 8086PC取指過程(1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩沖器;(2)IP = IP + 所讀取指令的長度,從而指向下一條指令;(3)執行指令。 轉到步驟 (1),重復這個過程。CPU將CS、IP中的內容當作指令的段地址和偏移地址,用它們合成指令的物理地址,到內存中讀取指令碼,
8、執行。CPU將CS:IP指向的內存單元中的內容看作指令。CPU根據什么將內存中的信息看作指令?內存中指令和數據沒有任何區別,都是二進制信息,CPU在工作的時候把有的信息看作指令,有的信息看作數據。3.1.4修改CS、IP的指令在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內容實現對CPU的控制。CPU從何處執行指令是由CS、IP中的內容決定的,程序員可以通過改變CS、IP中的內容來控制CPU執行目標指令。我們如何改變CS、IP的值呢?3.1.4修改CS、IP的指令8086CPU必須提供相應的指令先回想我們如何修改AX中的值?mov指令不能用于設置CS、IP的值,
9、8086CPU沒有提供這樣的功能。8086CPU為CS、IP提供了另外的指令來改變它們的值:轉移指令如何修改AX中的值?mov 指令 例如:mov ax,123mov指令可以改變8086CPU大部分寄存器的值,被稱為傳送指令。能夠通過mov 指令改變CS、IP的值嗎?修改CS、IP的指令 跳轉指令,同時修改CS、IP的內容。Jmp指令 jmp 段地址:偏移地址格式: jmp 2AE3:3 jmp 3:0B16例如: 用指令中給出的段地址修改CS,偏移地址修改IP。功能:修改CS、IP的指令 僅修改IP的內容:Jmp指令: jmp 某一合法寄存器格式: jmp ax (類似于 mov IP,ax
10、) jmp bx例如: 用寄存器中的值修改IP。功能:內存中存放的機器碼和對應匯編指令情況: (初始:CS=2000H,IP=0000H),寫出指令執行序列:例子:問題分析結果:(1)mov ax,6622(2)jmp 1000:3(3)mov ax,0000(4)mov bx,ax(5)jmp bx(6)mov ax,0123H(7)轉到第(3)步執行3.1.5 代碼存放的地方-代碼段 對于8086PC機,在編程時,可以根據需要,將一組內存單元定義為一個段。 可以將長度為 N( N64KB )的一組代碼,存在一組地址連續、起始地址為 16的倍數的內存單元中,這段內存是用來存放代碼的,從而定義
11、了一個代碼段。3.1.5代碼段 這段長度為 10 字節的字節的指令,存在從123B0H123B9H的一組內存單元中,我們就可以認為,123B0H123B9H這段內存單元是用來存放代碼的 ,是一個代碼段 ,它的段地址為123BH,長度為10字節。例如3.1.5代碼段 如何使得代碼段中的指令被執行呢?如何使得代碼段中的指令被執行呢? 將一段內存當作代碼段,僅僅是我們在編程時的一種安排,CPU 并不會由于這種安排,就自動地將我們定義得代碼段中的指令當作指令來執行。 CPU 只認被 CS:IP 指向的內存單元中的內容為指令。 所以要將CS:IP指向所定義的代碼段中的第一條指令的首地址。 CS = 12
12、3BH,IP = 0000H。例子:我們要讀取10000H單元的內容可以用如下程序段進行: mov bx,1000H mov ds,bx mov al,0上面三條指令將10000H(1000:0)中的數據讀到al中。3.2 數據存取數據存取指令 mov al,0已知的mov指令可完成的兩種傳送功能: (1)將數據直接送入寄存器; (2)將一個寄存器中的內容送入另一個寄存器中。mov 指令 還可以將一個內存單元中的內容送入一個寄存器。從哪個內存單元送到哪個寄存器中呢?mov指令的格式: mov 寄存器名,內存單元地址“”表示一個內存單元, “”中的0表示內存單元的偏移地址。那么內存單元的段地址是
13、多少呢?執行指令時,8086CPU自動取DS中的數據為內存單元的段地址。如何用mov指令從10000H中讀取數據? 10000H表示為1000:0(段地址:偏移地址) 將段地址1000H放入ds 用mov al,0完成傳送(mov指令中的說明操作對象是一個內存單元,中的0說明這個內存單元的偏移地址是0,它的段地址默認放在ds中)如何把1000H送入ds? 傳送指令 mov ax,1 相似的方式 mov ds,1000H? 8086CPU不支持將數據直接送入段寄存器的操作,ds是一個段寄存器。 (硬件設計的問題) mov ds,1000H 是非法的。 數據一般的寄存器段寄存器如何把1000H送入
14、ds? 問題: 寫幾條指令,將al中的數據送入內存單元10000H?(思考后分析) 分析問題本質: 怎樣將數據從寄存器送入內存單元? 結論:mov bx,1000H mov ds,bx mov 0,al (一種合理的回答)3.2.1 數據存取數據存取3.2.2 字的傳送 因為8086CPU是16位結構,有16根數據線,所以,可以一次性傳送16位的數據,也就是一次性傳送一個字。 問題:內存中的情況如右圖,寫出下面指令執行后寄存器ax,bx,cx中的值。 思考后看分析。(單步跟蹤)3.2.2字的傳送(續)3.2.2 字的傳送(續) 問題:內存中的情況如右圖,寫出下面指令執行后寄存器ax,bx,cx
15、中的值。 思考后看分析。(單步跟蹤)3.2.2 字的傳送(續)問題分析 add和sub指令同mov一樣,都有兩個操作對象。 它們可以對段寄存器進行操作嗎?(請自行在Debug中試驗)3.2.3 mov、add、sub指令3.2.4 數據段 前面講過,對于8086PC機,我們可以根據需要將一組內存單元定義為一個段。 我們可以將一組長度為N(N64K)、地址連續、起始地址為16的倍數的內存單元當作專門存儲數據的內存空間,從而定義了一個數據段。 比如我們用123B0H123B9H這段空間來存放數據: 段地址:123BH 長度:10字節3.2.4 數據段(續) 如何訪問數據段中的數據呢? 將一段內存當
16、作數據段,是我們在編程時的一種安排,我們可以在具體操作的時候 ,用 ds 存放數據段的段地址,再根據需要,用相關指令訪問數據段中的具體單元。 示例 我們將123B0H123BAH的內存單元定義為數據段,我們現在要累加這個數據段中的前3個單元中的數據,代碼如下:3.2.4 數據段(續) 問題 寫幾條指令,累加數據段中的前3個字型數據。 思考后看分析。3.2.4 數據段(續)問題分析 注意:一個字型數據占兩個單元,所以偏移地址是0、2、4。3.2.4 數據段(續)3.2.5 小結 (1)字在內存中存儲時 ,要用兩個地址連續的內存單元來存放,字的低位字節存放在低地址單元中,高位字節存放再高地址單元中
17、。 (2)用 mov 指令要訪問內存單元,可以在mov指令中只給出單元的偏移地址,此時,段地址默認在DS寄存器中。 (3)address表示一個偏移地址為address的內存單元。小結(續) (4)在內存和寄存器之間傳送字型數據時,高地址單元和高8位寄存器、低地址單元和低8位寄存器相對應。 (5)mov、add、sub是具有兩個操作對象的指令。jmp是具有一個操作對象的指令。 (6)可以根據自己的推測,在Debug中實驗指令的新格式。3.3 棧 我們研究棧的角度: 棧是一種具有特殊的訪問方式的存儲空間。它的特殊性就在于,最后進入這個空間的數據,最先出去。 可以用一個盒子和3本書來描述 棧的操作
18、方式 棧有兩個基本的操作:入棧和出棧。 入棧:將一個新的元素放到棧頂; 出棧:從棧頂取出一個元素。 棧頂的元素總是最后入棧,需要出棧時,又最先被從棧中取出。 棧的操作規則:LIFO(Last In First Out,后進先出)3.3 棧(續)3.3.1 CPU提供的棧機制 現今的CPU中都有棧的設計。 8086CPU提供相關的指令來以棧的方式訪問內存空間。 這意味著,我們在基于8086CPU編程的時候,可以將一段內存當作棧來使用。3.3.1 CPU提供的棧機制(續) 8086CPU提供入棧和出棧指令: (最基本的) PUSH(入棧) POP (出棧) push ax:將寄存器ax中的數據送入
19、棧中; pop ax :從棧頂取出數據送入ax。 8086CPU的入棧和出棧操作都是以字為單位進行的。 下面舉例說明,我們可以將10000H1000FH這段內存當作棧來使用。 下面一段指令的執行過程: mov ax,0123H push ax mov bx,2266H push bx mov cx,1122H push cx pop ax pop bx pop cx兩個疑問 1、CPU如何知道一段內存空間被當作棧使用? 2、執行push和pop的時候,如何知道哪個單元是棧頂單元? 分析 結論:任意時刻,SS:SP指向棧頂元素。 3.3.1 棧(續)對于兩個疑問的分析回想:CPU如何知道當前要執
20、行的指令所在的位置?寄存器CS和IP中存放著當前指令的段地址和偏移地址。8086CPU中,有兩個寄存器:段寄存器SS 存放棧頂的段地址寄存器SP 存放棧頂的偏移地址 任意時刻,SS:SP指向棧頂元素。push 指令的執行過程 push ax (1)SP=SP2; (2)將ax中的內容送入SS:SP指向的內存單元處,SS:SP此時指向新棧頂。 圖示push 指令的執行過程 問題:如果我們將10000H1000FH 這段空間當作棧,初始狀態棧是空的,此時,SS=1000H,SP=? 思考后看分析。問題分析 SP = 0010H問題分析(續) 我們將10000H1000FH 這段空間當作棧段,SS=
21、1000H,棧空間大小為16 字節 ,棧最底部的字單元地址為1000:000E。任意時刻,SS:SP指向棧頂,當棧中只有一個元素的時候,SS = 1000H,SP=000EH。3.3.1 棧(續)問題分析(續) 棧為空,就相當于棧中唯一的元素出棧,出棧后,SP=SP+2 ,SP 原來為 000EH,加 2 后SP=10H,所以,當棧為空的時候,SS=1000H,SP=10H。 換個角度看3.3.1棧(續)問題分析(續) 換個角度看: 任意時刻,SS:SP 指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素,所以SS:SP 只能指向棧的最底部單元下面的單元,該單元的偏移地址為棧最底部
22、的字單元的偏移地址+2,棧最底部字單元的地址為1000:000E,所以棧空時,SP=0010H。3.3.1 棧(續)pop 指令的執行過程 pop ax (1)將SS:SP指向的內存單元處的數據送入ax中; (2)SP = SP+2,SS:SP指向當前棧頂下面的單元,以當前棧頂下面的單元為新的棧頂。 圖示3.3.2 棧(續)pop 指令的執行過程 注意3.3.2 棧(續)pop 指令的執行過程 注意: 出棧后,SS:SP指向新的棧頂 1000EH,pop操作前的棧頂元素,1000CH 處的2266H 依然存在 ,但是,它已不在棧中。 當再次執行push等入棧指令后,SS:SP移至1000CH,
23、并在里面寫入新的數據,它將被覆蓋。3.3.2 棧(續)3.3.3 棧頂超界的問題 SS和SP只記錄了棧頂的地址,依靠SS和SP可以保證在入棧和出棧時找到棧頂。 可是,如何能夠保證在入棧、出棧時,棧頂不會超出棧空間?3.3.3 棧頂超界的問題(續) 當棧滿的時候再使用push指令入棧, 棧空的時候再使用pop指令出棧, 都將發生棧頂超界問題。 棧頂超界是危險的。 棧頂超界是危險的: 因為我們既然將一段空間安排為棧 ,那么在棧空間之外的空間里很可能存放了具有其他用途的數據、代碼等,這些數據、代碼可能是我們自己的程序中的,也可能是別的程序中的。(畢竟一個計算機系統并不是只有我們自己的程序在運行)3.
24、3.3 棧頂超界的問題(續) 但是由于我們在入棧出棧時的不小心,而將這些數據、代碼意外地改寫,將會引發一連串的錯誤。 我們當然希望CPU 可以幫我們解決這個問題,3.3.3 棧頂超界的問題(續) 比如說在CPU中有記錄棧頂上限和下限的寄存器,我們可以通過填寫這些寄存器來指定棧空間的范圍 ,然后 ,CPU 在執行push指令的時候靠檢測棧頂上限寄存器,在執行pop 指令的時候靠檢測棧頂下限寄存器保證不會超界。 實際情況:8086CPU中并沒有這樣的寄存器。3.3.3 棧頂超界的問題(續) 8086CPU不保證對棧的操作不會超界。 這就是說, 8086CPU 只知道棧頂在何處(由SS:SP指示),
25、而不知道讀者安排的棧空間有多大。這點就好像 ,CPU 只知道當前要執行的指令在何處(由CS:SP指示)而不知道讀者要執行的指令有多少。 從這兩點我們可以看出3.3.3 棧頂超界的問題(續) 8086CPU的工作機理,只考慮當前的情況: 當前棧頂在何處; 當前要執行的指令是哪一條。 結論3.3.3 棧頂超界的問題(續) 結論: 我們在編程的時候要自己操心棧頂超界的問題 ,要根據可能用到的最大棧空間,來安排棧的大小,防止入棧的數據太多而導致的超界;執行出棧操作的時候也要注意,以防棧空的時候繼續出棧而導致的超界。3.3.3 棧頂超界的問題(續)棧與內存 棧空間當然也是內存空間的一部分,它只是一段可以
26、以一種特殊的方式進行訪問的內存空間。3.3.4 PUSH、POP指令(續)3.3.5棧的綜述 (1)8086CPU提供了棧操作機制,方案如下: 在SS,SP中存放棧頂的段地址和偏移地址; 提供入棧和出棧指令,他們根據SS:SP指示的地址,按照棧的方式訪問內存單元。 (2)push指令的執行步驟: 1)SP=SP-2; 2)向SS:SP指向的字單元中送入數據。 (3)pop指令的執行步驟: 1)從SS:SP指向的字單元中讀取數據; 2)SP=SP-2。3.3.5棧的綜述(續) (4)任意時刻,SS:SP指向棧頂元素。 (5)8086CPU只記錄棧頂,棧空間的大小我們要自己管理。 (6)用棧來暫存
27、以后需要恢復的寄存器的內容時 ,寄存器出棧的順序要和 入棧的順序相反。 (7)push、pop實質上是一種內存傳送指令,注意它們的靈活應用。 棧是一種非常重要的機制,一定要深入理解,靈活掌握。3.3.6 棧段 前面講過,對于8086PC機,在編程時,我們可以根據需要 ,將一組內存單元定義為一個段。 我們可以將長度為 N(N 64K )的一組地址連續、起始地址為16的倍數的內存單元,當作棧來用,從而定義了一個棧段。3.3.6 棧段(續) 比如我們將10010H1001FH 這段長度為 16 字節的內存空間當作棧來用,以棧的方式進行訪問。 這段空間就可以成為棧段,段地址為1000H,大小為16字節
28、。 將一段內存當作棧段,僅僅是我們在編程時的一種安排,CPU 并不會由于這種安排,就在執行push、pop 等棧操作指令時就自動地將我們定義的棧段當作棧空間來訪問。 如何使的如push、pop 等棧操作指令訪問我們定義的棧段呢? 將SS:SP指向我們定義的棧段。3.3.6 棧段(續) 問題3.11 如果我們將10000H1FFFFH這段空間當作棧段,初始狀態是空的,此時,SS=1000H,SP=? 思考后看分析。3.3.6 棧段(續)問題3.11分析 我們將10000H1FFFFH這段空間當作棧段 ,SS=1000H ,棧空間大小為64KB ,棧最底部的字單元地址為1000:FFFE。 任意時
29、刻,SS:SP指向棧頂,當棧中只有一個元素的時候,SS=1000H,SP=FFFEH。3.3.6棧段(續)問題3.11分析 棧為空,就相當于棧中唯一的元素出棧,出棧后,SP=SP+2。 SP原來為FFFEH,加2后SP=0,所以,當棧為空的時候,SS=1000H,SP=0。 換個角度看3.3.6 棧段(續)問題3.11分析(續) 換個角度看任意時刻,SS:SP指向棧頂元素,當棧為空的時候 ,棧中沒有元素 ,也就不存在棧頂元素,所以SS:SP只能指向棧的最底部單元下面的單元 ,該單元的偏移地址為棧最底部的字單元的偏移地址+2 ,棧最底部字單元的地址為1000:FFFE,所以棧空時,SP=0000
30、H。問題3.12 一個棧段最大可以設為多少?為什么? 思考后看分析。問題3.12分析 一個棧段最大可以設為多少? 分析:這個問題顯而易見,提出來只是為了提示我們將相關的知識融會起來。 首先從棧操作指令所完成的功能的角度上來看,push、pop等指令在執行的時候只修改SP;問題3.12分析 所以棧頂的變化范圍是0FFFFH,從棧空時候的SP=0,一直壓棧,直到棧滿時SP=0;如果再次壓棧,棧頂將環繞,覆蓋了原來棧中的內容。 所以一個棧段的容量最大為64KB。3.4段的綜述 我們可以將一段內存定義為一個段,用一個段地址指示段,用偏移地址訪問段內的單元。這完全是我們自己的安排。 我們可以用一個段存放
31、數據,將它定義為“數據段”; 我們可以用一個段存放代碼,將它定義為“代碼段”; 我們可以用一個段當作棧,將它定義為“棧段”;3.4段的綜述(續) 我們可以這樣安排,但若要讓CPU按照我們的安排來訪問這些段,就要: 對于數據段,將它的段地址放在 DS中,用mov、add、sub等訪問內存單元的指令時,CPU就將我們定義的數據段中的內容當作數據段來訪問;3.4段的綜述(續) 對于代碼段,將它的段地址放在 CS中,將段中第一條指令的偏移地址放在IP中,這樣CPU就將執行我們定義的代碼段中的指令;3.4段的綜述(續) 對于棧段,將它的段地址放在SS中,將棧頂單元的偏移地置放在 SP 中,這樣CPU在需
32、要進行棧操作的時候,比如執行 push、pop 指令等,就將我們定義的棧段當作棧空間來用。3.4段的綜述(續) 可見,不管我們如何安排 ,CPU 將內存中的某段內存當作代碼 ,是因為CS:IP指向了那里;CPU將某段內存當作棧 ,是因為 SS:SP 指向了那里。3.4段的綜述(續) 我們一定要清楚 ,什么是我們的安排,以及如何讓CPU按我們的安排行事。 要非常的清楚CPU的工作機理,才能在控制CPU來按照我們的安排運行的時候做到游刃有余。3.4段的綜述(續) 比如我們將10000H1001FH安排為代碼段,并在里面存儲如下代碼: mov ax,1000H mov ss,ax mov sp,00
33、20H ;初始化棧頂 mov ax,cs mov ds,ax ;設置數據段段地址 mov ax,0 add ax,2 mov bx,4 add bx,6 push ax push bx pop ax pop bx3.4段的綜述(續) 設置CS=1000H,IP=0,這段代碼將得到執行。 可以看到,在這段代碼中,我們又將10000H1001FH 安排為棧段和數據段。 10000H1001FH這段內存,既是代碼段,又是棧段和數據段。3.4段的綜述(續) 一段內存,可以既是代碼的存儲空間,又是數據的存儲空間,還可以是棧空間,也可以什么也不是。 關鍵在于CPU中寄存器的設置,即: CS、IP、SS、S
34、P、DS的指向。3.3指令的尋址方式 尋址方式尋址方式:指令中提供操作數或操作數地址的方:指令中提供操作數或操作數地址的方式。式。 有效地址有效地址EA(Effective Address):操作數的偏移地址。操作數的偏移地址。 操作數的操作數的物理地址物理地址=段地址段地址10H+EA 尋址方式的分類:尋址方式的分類: 與數據有關的尋址方式與數據有關的尋址方式 與轉移地址有關的尋址方式與轉移地址有關的尋址方式3.3.1尋址方式尋址方式3.3.2 立即尋址方式立即尋址方式3.3.3寄存器尋址方式寄存器尋址方式 3.3.4 存儲器尋址方式存儲器尋址方式 直接尋址方式直接尋址方式 寄存器間接尋址方
35、式寄存器間接尋址方式寄存器相對尋址方式寄存器相對尋址方式 基址變址尋址方式基址變址尋址方式相對基址變址尋址方式相對基址變址尋址方式 例例例例例例1例例2立即尋址方式立即尋址方式 返回返回例:例: MOV AX,3060H例例 :MOV AX,3060HMOV AL,5MOV BL,0FFH MOV BX,0A46DHMOV CH,23寄存器尋址方式寄存器尋址方式 8位寄存器:位寄存器:AH、AL,BH、BL CH、CL, DH、DL16位寄存器:位寄存器:AX、BX、CX、DX SI、DI、BP、SP 返回返回例例1 MOV AX ,BX;兩個操作數(;兩個操作數(16位)位) 都是寄存器尋址
36、都是寄存器尋址執行前:(執行前:(AX)=0000H (BX)=1234H,執行后:(執行后:(AX)=1234H (BX)=1234H。 例例1:MOV AX,DS:2000H(1)存儲器讀操作)存儲器讀操作 返回返回 直接尋址方式直接尋址方式 (2)存儲器寫操作)存儲器寫操作 返回返回例例2 MOV DS:4000H,AX例例3 MOV AX,VALUE MOV AX,VALUE返回返回有效地址:有效地址:EA=VALUE=1000H設設VALUE=1000H物理地址物理地址=(DS)10HEA設設(DS)=1500H =15000H+1000H=16000H若若 (16000 H) =5
37、678H執行指令后:執行指令后:(AX) =5678H (3)符號地址)符號地址例例4 VALUE EQU 1000H MOV AX,DS:VALUE MOV AX,ES:VALUE 若已知(若已知(ES)=3600H,EA=VALUE=1000H,則指令源操作數的物理地址計算為:則指令源操作數的物理地址計算為: 物理地址物理地址=(ES)10HEA =36000H+1000H = 37000H若若(37000H) = 9091H 執行第二條指令后:執行第二條指令后:(AX) = 9091H返回返回(4)段超越)段超越 寄存器間接尋址方式寄存器間接尋址方式 (BX)操作數的物理地址操作數的物理地址=(DS)10H ( SI ) (DI ) 操作數的物理地址操作數的物理地址=(SS)10H ( BP )例:例: MOV AX,BX四個間址寄存器:四個間址寄存器:BX,BP ,SI ,DI返回返回例:例:MOV AX,TOPSI (BX)操作數的物理地址操作數的物理地址=(DS)10H ( SI )+ 8位(位(16位)位移量位)位移量 (DI ) 操作數的物理地址操作數的物理地址=(SS)10H( BP ) + 8位(位(16位)位移量位)位移量返回返回寄存器相對尋址方式寄存器相對尋址方式操作數的物理地址操作數的物理地址=(DS)10H(BX) + ( S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司文體類活動策劃方案
- 公司組織親子活動方案
- 公司研討旅行活動方案
- 公司組織形象活動方案
- 公司紫金山登山活動方案
- 公司歌曲比賽策劃方案
- 公司烤全羊活動策劃方案
- 公司社團展示活動方案
- 公司組織爬樓梯活動方案
- 公司結業聚餐活動方案
- 2024年昆明市公安局招聘勤務輔警真題
- 客房部內部管理制度
- 小學生數學學習習慣的培養講座
- DeepSeek+AI大模型賦能制造業智能化供應鏈解決方案
- 2025河南省豫地科技集團有限公司社會招聘169人筆試參考題庫附帶答案詳解析集合
- T/CCOA 45-2023氣膜鋼筋混凝土球形倉儲糧技術規程
- GB/T 27772-2025病媒生物密度控制水平蠅類
- 《船舶行業重大生產安全事故隱患判定標準》解讀與培訓
- 2025年中考生物模擬考試卷(附答案)
- 初中歷史人教部編版八年級上冊第18課 從九一八事變到西安事變教學設計
- 11《大家排好隊》(教學設計)2023-2024學年統編版道德與法治二年級上冊
評論
0/150
提交評論