版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第4章章 尋址方式與指令系統(tǒng)尋址方式與指令系統(tǒng) 本章主要內容本章主要內容(1) 數據尋址方式數據尋址方式(2) 轉移地址尋址方式轉移地址尋址方式(3) 8086 指令系統(tǒng)及編程應用舉例指令系統(tǒng)及編程應用舉例(4) 指令編碼格式指令編碼格式4.1 尋址方式尋址方式4.1.1 8086/8088 的尋址方式的尋址方式1. 尋址方式概述尋址方式概述 尋址方式尋址方式定義定義 :指令中如何提供操作數或操作數地址的指令中如何提供操作數或操作數地址的方式稱為尋址方式。方式稱為尋址方式。 規(guī)定如何對地址字段作出解釋以找到操作數規(guī)定如何對地址字段作出解釋以找到操作數 * 程序轉移時需提供轉移地址,這跟提供操
2、作數地址在程序轉移時需提供轉移地址,這跟提供操作數地址在方法上沒有本質區(qū)別,因此也歸入尋址方式的范疇。方法上沒有本質區(qū)別,因此也歸入尋址方式的范疇。 一個指令系統(tǒng)能夠提供哪些尋址方式,能否為一個指令系統(tǒng)能夠提供哪些尋址方式,能否為編制程序提供方便,這是指令系統(tǒng)設計的關鍵。編制程序提供方便,這是指令系統(tǒng)設計的關鍵。需要說明的是,在不同的計算機系統(tǒng)中,尋址需要說明的是,在不同的計算機系統(tǒng)中,尋址方式的名稱和分類并不統(tǒng)一,但基本可以歸結方式的名稱和分類并不統(tǒng)一,但基本可以歸結為以下幾種方式或它們的變型或組合:為以下幾種方式或它們的變型或組合:尋址方式的名稱和分類尋址方式的名稱和分類立即尋址(立即數尋
3、立即尋址(立即數尋址)址)寄存器尋址寄存器尋址直接尋址直接尋址間接尋址間接尋址變址尋址變址尋址 例如,例如,Z80系統(tǒng):系統(tǒng):立即尋址立即尋址 ;直接尋址;直接尋址立即擴展尋址;立即擴展尋址;零頁尋零頁尋址址隱含尋址隱含尋址;相對尋址;相對尋址寄存器尋址;變址尋址寄存器尋址;變址尋址寄存器間接尋址;寄存器間接尋址;位尋位尋址址 兩類尋址方式兩類尋址方式 數據尋址方式數據尋址方式 轉移地址尋址方式轉移地址尋址方式 (重點討論數據的尋址方式)(重點討論數據的尋址方式) 2. 數據尋址方式數據尋址方式(1) 立即尋址立即尋址(Immediate addressing)指令中直接給出操作數,操作數緊跟
4、在操作碼指令中直接給出操作數,操作數緊跟在操作碼之后,作為指令的一部分存放在之后,作為指令的一部分存放在代碼段代碼段里,在里,在取出指令的同時也就取出了操作數,立即有操取出指令的同時也就取出了操作數,立即有操作數可用,所以稱之為作數可用,所以稱之為立即尋址立即尋址。 目的 源 example MOV AL, 80H ; 低地址低地址 存儲器 AX MOV AX, 3064H ; 代 碼 ADD AL, 20H ; 段 ADD AX, 1090H; 高地址高地址 OP 6 4 3 0 立即數可以為立即數可以為8位,也可以為位,也可以為16位。如果是位。如果是16位數,則位數,則“高位字節(jié)存放在高
5、地址中,低位字高位字節(jié)存放在高地址中,低位字節(jié)存放在低地址中節(jié)存放在低地址中。”立即尋址方式常用于給寄存器賦值,并且只能立即尋址方式常用于給寄存器賦值,并且只能用于用于源操作數,而不能用于目的源操作數,而不能用于目的操作數。操作數。 下述各條指令源操作數的尋址方式也都是立即尋址,下述各條指令源操作數的尋址方式也都是立即尋址,但這些指令都是錯誤的但這些指令都是錯誤的: MOV AL, 256 ; 256=100H,超過了,超過了AL能存放的數的范圍能存放的數的范圍 MOV AX, -32769 ; -32769超過了超過了AX能存放的帶符號數能存放的帶符號數(補碼補碼)范范 圍圍 MOV 100
6、H, AL ; 立即數不能作為目的操作數立即數不能作為目的操作數 DEC 20 ; 單操作數指令不能使用立即數單操作數指令不能使用立即數 MOV DS, 1234H ; 源操作數是立即數,則目的操作數就不能是源操作數是立即數,則目的操作數就不能是 段寄存器段寄存器(2)寄存器尋址()寄存器尋址(Register addressing)操作數在寄存器中,指令中指明寄存器號,這操作數在寄存器中,指令中指明寄存器號,這種尋址方式叫寄存器尋址。種尋址方式叫寄存器尋址。對于對于8位操作數,寄存器可以是位操作數,寄存器可以是 AH,AL,BH,BL, CH, CL, DH, DL .對于對于16位操作數,
7、寄存器可以是位操作數,寄存器可以是AX, BX,CX, DX, SI, DI, SP ,BP,CS,DS,ES,SS (但但CS 不能作不能作目的寄存器)目的寄存器) EXAMPLE INC AX ; MOV AX, BX ; DEC AX ; ROL AH , 1 ; 將將AH中的內容循環(huán)左移一位中的內容循環(huán)左移一位CFD7 D0 練習:練習:MOV AX , BX ;正確。正確。指令執(zhí)行后,指令執(zhí)行后, AXBX,但,但BX不變不變 MOV AX, BL ;錯誤。源和目的的位數不相同錯誤。源和目的的位數不相同 MOV CS, AX ;錯誤。錯誤。CS不能作為目的操作數不能作為目的操作數 M
8、OV ES, DS ;錯誤。兩個操作數不能都是段錯誤。兩個操作數不能都是段 寄存器寄存器 寄存器尋址的特點寄存器尋址的特點 (1) 操作數就在寄存器中操作數就在寄存器中,不需要訪問存儲器來不需要訪問存儲器來取得操作數取得操作數(指令執(zhí)行時,操作就在(指令執(zhí)行時,操作就在CPU的內的內部進行),因而執(zhí)行速度快。部進行),因而執(zhí)行速度快。 (2)寄存器號比內存地址短寄存器號比內存地址短 * 在編程中,如有可能,盡量使用這種尋址方式的指令。在編程中,如有可能,盡量使用這種尋址方式的指令。 * 寄存器尋址方式既可用于源操作數,也可用于目的操寄存器尋址方式既可用于源操作數,也可用于目的操作數,還可以兩者
9、都用于寄存器尋址方式(如作數,還可以兩者都用于寄存器尋址方式(如 MOV BX , AX ) 除以上兩種尋址方式外,下面各種尋址方式的除以上兩種尋址方式外,下面各種尋址方式的操作數均在存儲器中,通過采用不同的尋址方操作數均在存儲器中,通過采用不同的尋址方式取得操作數地址,從而取得操作數。式取得操作數地址,從而取得操作數。(3)直接尋址()直接尋址(Direct Addressing)說明:在討論尋址方式時,通常把操作數的偏移地址說明:在討論尋址方式時,通常把操作數的偏移地址稱為有效地址稱為有效地址EAEA (Effective AddressEffective Address) ) ,EAEA
10、可通過不同可通過不同的尋址方式來得到。的尋址方式來得到。在直接尋址方式中,在直接尋址方式中,指令中直接給出操作數的指令中直接給出操作數的有效地址有效地址,或者說,有效地址,或者說,有效地址EA就在指令中。就在指令中。它它(操作數的有效地址,而不是操作數本身操作數的有效地址,而不是操作數本身)存存放在代碼段中指令的操作碼之后,但操作數一放在代碼段中指令的操作碼之后,但操作數一般存放在數據段中。般存放在數據段中。 例例 1. MOV AX , DS:2000H; 如如(DS)= 3000H, 則指令的執(zhí)行情況如下圖則指令的執(zhí)行情況如下圖所示:所示: 代 存儲器 采用直接尋址方式,如果沒 碼 有用“
11、段跨越前綴”標明操作 段 數在哪一段,就默認段寄存 為DS. 30000H 數 AX 據 段 32000H 執(zhí)行結果:(AX)=3050H OP 00 20 50 30 也允許數據存放在數據段以外的其它段(如附也允許數據存放在數據段以外的其它段(如附加段加段)。此時應在指令中給出。此時應在指令中給出 “跨越段前綴跨越段前綴”。例例 2: 如數據在附加段中,則應指明如數據在附加段中,則應指明“段跨越段跨越綴綴” 。 MOV AX , ES : 3000H 或或 ES: MOV AX , 3000H * 為了使指令字不要過長,規(guī)定雙操作數指令不能兩個為了使指令字不要過長,規(guī)定雙操作數指令不能兩個操
12、作數都用直接尋址方式。操作數都用直接尋址方式。 如如 MOV DS: 2000H , DS:3000H 寄存器間接尋址寄存器間接尋址(Register indirect Addressing)采用寄存器間接尋址方式時,指令中給采用寄存器間接尋址方式時,指令中給 出寄存出寄存器號器號(寄存器為寄存器為BX,BP,SI和和DI之一之一), 被指定的寄被指定的寄存器中存放著操作數的有效地址,操作數在存存器中存放著操作數的有效地址,操作數在存儲器中儲器中(以寄存器的內容為操作數的有效地以寄存器的內容為操作數的有效地址)址)。 (BX) .對應段寄存器為對應段寄存器為 DS EA= (BP) . SS
13、(SI ) . DS (DI) DSExampleMOV AX , BX ; 設設 ( DS) = 2000H ,(BX) = 1000H 物理地址物理地址20000H 1000H =21000H *指令中也可以通過 AX . “段跨越前綴”取得 數 其他段中的數據, 據 例如: 段 MOV AX,ES: BX 21000H 指令的執(zhí)行結果為: (AX) = 50A0H A0 50 (5)寄存器相對尋址()寄存器相對尋址(Register relative addressing)操作數的有效地址是一個基址或變址寄存器的操作數的有效地址是一個基址或變址寄存器的內容與指令中指定的內容與指令中指定的
14、8位或位或16位位移量位位移量(Displacement)之和。之和。如下圖所示:如下圖所示: (BX) 8位位移量位位移量EA = (BP) + (SI) 16位位移量位位移量 (DI) 若沒有段跨越前綴,則對于寄存器若沒有段跨越前綴,則對于寄存器BX,SI, DI的情況,的情況,段寄存器為段寄存器為DS;對于寄存器為對于寄存器為BP的情況,則段寄存器為的情況,則段寄存器為SS。ExampleMOV AX, SI+3000H 操操設設(DS)4000H,(SI)=2000H 作作物理地址物理地址 碼碼40000H+2000H+3000H 位位 45000H 移移 量量指令的執(zhí)行情況如指令的執(zhí)
15、行情況如 右圖右圖 AX 40000H 43000H SI 數數 45000H 據據 段段 OP OP 00 30 34 12這種尋址方式可用于表格的處理,通過這種尋址方式可用于表格的處理,通過位移量位移量來設置表格的首地址;來設置表格的首地址;利用修改利用修改基址寄存器或變址寄存器基址寄存器或變址寄存器的內容來獲的內容來獲得表項的值。得表項的值。(6)基址變址尋址()基址變址尋址(Based indexed addressing)操作數的有效地址是一個基址寄存器和一個變操作數的有效地址是一個基址寄存器和一個變址寄存器內容之和,兩個寄存器均由指令指定。址寄存器內容之和,兩個寄存器均由指令指定。
16、 (BX) (SI) 若基址寄存器為若基址寄存器為BX,則段寄存器為則段寄存器為DSEA + (BP) (DI) 若基址寄存器為若基址寄存器為BP,則段寄存器為則段寄存器為SS Example 例例:MOV AX,BX+DI 設設(DS)=2100H, (BX)=0158H, DI=10A5H. 則則 EA= 0158H+10A5H=11FDH 物理地址物理地址21000H+11FDH=221FDH (BX) 21000H 21158H AX 221FDH 34 12這種尋址方式同樣適用于表格這種尋址方式同樣適用于表格(或數組或數組)的處理的處理,表的首地址可存放在基址寄存器中,而用變址表的首
17、地址可存放在基址寄存器中,而用變址寄存器來訪問表格中的各項。寄存器來訪問表格中的各項。由于兩個寄存器都可以修改,使由于兩個寄存器都可以修改,使 用起來更靈活。用起來更靈活。(7 )相對基址變址尋址相對基址變址尋址(Relative based indexed address)也稱也稱“帶位移量的基址加變址尋址方式帶位移量的基址加變址尋址方式”. 操作數的有效地址是一個基址寄存器和一個變址寄存器操作數的有效地址是一個基址寄存器和一個變址寄存器內容與內容與8位或位或16位位移量之和。位位移量之和。 (BX) (SI) 用用BX,則段寄存器為則段寄存器為 DS EA= + + 位移量位移量 (BP)
18、 (DI) 用用BP,則段寄存器為則段寄存器為 SS例:例:MOV AX,BX+SI+0250H設設(DS)=3000H,(BX)=2000H,(SI)=1000H,則 代代 EA 2000H+1000H+0250H=3250H 碼碼物理地址物理地址30000H+3250H=33250H 段段 30000H 位移量位移量 AX 30250H 數數 (BX) 32250H 據據 (SI) 33250H 段段 OP OP 50 02 34 12這種尋址方式可用于訪問二維數組。這種尋址方式可用于訪問二維數組。設數組元素在內存中按行順序存放(首先放第一行所設數組元素在內存中按行順序存放(首先放第一行所
19、有元素,再放第二行所有元素,有元素,再放第二行所有元素,)。通過改變基)。通過改變基址寄存器(如址寄存器(如BXBX)和變址寄存器(如)和變址寄存器(如SI)SI)的值可以訪問的值可以訪問數組中不同行和列上的元素。數組中不同行和列上的元素。 若保持若保持BXBX不變而不變而SISI改變,則可以訪問同一行的所有元改變,則可以訪問同一行的所有元素。素。若保持若保持SISI不變而不變而BXBX改變,則可以訪問同一列的所有元改變,則可以訪問同一列的所有元素。素。數據的尋址方式的尋址過程數據的尋址方式的尋址過程(圖示)圖示).指令數據寄存器(1)立即尋址數據指令寄存器(2)寄存器尋址圖圖4-1 數據的尋
20、址方式的尋址過程數據的尋址方式的尋址過程(1)EA數據指令存儲器(3)直接尋址寄存器EA指令寄存器(4)寄存器間接尋址數據存儲器圖圖4-1 數據的尋址方式的尋址過程(數據的尋址方式的尋址過程(2)數據存儲器地址寄存器寄存器指令位移量+EA(5)寄存器相對尋址圖圖4-1 數據的尋址方式的尋址過程數據的尋址方式的尋址過程(3)圖圖4-1 數據的尋址方式的尋址過程(數據的尋址方式的尋址過程(4)數據存儲器基地址寄存器基址寄存器指令變址寄存器+EA(6)基址變址尋址變址值寄存器圖圖4-1 數據的尋址方式的尋址過程(數據的尋址方式的尋址過程(5)數據存儲器基地址寄存器基址寄存器指令變址寄存器+EA(7)
21、基址變址相對尋址變址值寄存器位移量端口號數據指令端口(8)直接尋址DX端口號指令DX(9)間接尋址數據端口 圖圖4-1 數據的尋址方式的尋址過程(數據的尋址方式的尋址過程(6)端口操作數3 轉移地址的尋址方式轉移地址的尋址方式有關術語和概念有關術語和概念:段內轉移段內轉移如果轉移地址與該轉移類指令在同如果轉移地址與該轉移類指令在同一個代碼段,這樣的轉移稱為段內轉移,也稱一個代碼段,這樣的轉移稱為段內轉移,也稱近轉移近轉移;近轉移時的轉移地址只包含偏移地址部分,找近轉移時的轉移地址只包含偏移地址部分,找到轉移地址后,將轉移地址送入到轉移地址后,將轉移地址送入IP即可實現轉即可實現轉移移(CS的內
22、容不必改變的內容不必改變)。 段間轉移段間轉移如果轉移地址與該轉移類指令位于如果轉移地址與該轉移類指令位于不同的代碼段,這樣的轉移稱為段間轉移,也不同的代碼段,這樣的轉移稱為段間轉移,也稱稱遠轉移遠轉移;遠轉移時的轉移地址既包含偏移地址部分又包遠轉移時的轉移地址既包含偏移地址部分又包含段基值部分,找到轉移地址后,將轉移地址含段基值部分,找到轉移地址后,將轉移地址的段基值部分送入的段基值部分送入CS,將轉移地址的偏移地址,將轉移地址的偏移地址部分送入部分送入IP即可實現轉移。即可實現轉移。直接轉移直接轉移如果轉移地址直接放在指令中,則如果轉移地址直接放在指令中,則這樣的轉移稱為直接轉移,視轉移地
23、址是絕對這樣的轉移稱為直接轉移,視轉移地址是絕對地址還是相對地址地址還是相對地址(即地址位移量即地址位移量)又可分別稱又可分別稱為為絕對轉移和相對轉移。絕對轉移和相對轉移。間接轉移間接轉移如果轉移地址間接放在其他地方,如果轉移地址間接放在其他地方,則這樣的轉移稱為間接轉移,視轉移地址是在則這樣的轉移稱為間接轉移,視轉移地址是在寄存器中還是在存儲器中又可分別稱為寄存器寄存器中還是在存儲器中又可分別稱為寄存器操作數操作數(寄存器尋址寄存器尋址)和存儲器操作數和存儲器操作數(存儲器尋存儲器尋址址)。 以以JMP指令為例,可將轉移地址的各種尋址指令為例,可將轉移地址的各種尋址方式列出,如表方式列出,如
24、表4-2所示。所示。表表4-2 轉移地址的尋址方式轉移地址的尋址方式 段內轉移例段內轉移例 段間轉移例段間轉移例直接轉移直接轉移(L為標號)轉移地址在指令中(近標號)轉移地址在指令中(近標號)轉移地址在指令中(遠標號)轉移地址在指令中(遠標號)JMP L(近)JMP FAR PTR L (遠)寄存器操作數寄存器操作數轉移地址在通用字寄存器中轉移地址在通用字寄存器中無JMP AX間間接接轉轉移移存存儲儲器器操操作作數數直接尋址JMP WORD PRT DS:20JMP DWORD PTR DS: 20間接尋址寄存器間接尋址 轉移地址在轉移地址在“BX, BP, SI, DI 之一之一”中中JMP
25、 BXJMP DWORD PTR BX寄存器相對尋址 轉移地址在轉移地址在“BX, BP, SI, DI 之一之一+ 位移量位移量”中中JMP BX+20JMP DWORD PTR BX+20基址變址尋址 轉移地址在轉移地址在“BX, BP之一之一SI, DI 之一之一”中中JMP BX+SIJMP DWORD PTR BX+SI基址變址相對尋址 轉移地址在轉移地址在“BX, BP之一之一SI, DI 之一位移量之一位移量”中中JMP BX+SI+20JMP DWORD PTR BX+SI+20(1) 段內直接轉移段內直接轉移(直接近轉移直接近轉移)特點:特點: 轉移地址轉移地址(通常就是近標
26、號通常就是近標號)直接包含在匯編形式的轉直接包含在匯編形式的轉移指令中,移指令中,轉移指令的機器代碼中存放的是該標號與轉移指令的機器代碼中存放的是該標號與當前當前IP值的差值的差(標號標號-IP),此差稱為位移量,該位移量此差稱為位移量,該位移量與轉移指令一起存于代碼段:與轉移指令一起存于代碼段: 位移量被放在轉移指令位移量被放在轉移指令的操作碼之后,也是的操作碼之后,也是“高字節(jié)放在高地址單元,低字高字節(jié)放在高地址單元,低字節(jié)放在低地址單元節(jié)放在低地址單元”。在取轉移指令時,此位移量即作為轉移指令的一部分在取轉移指令時,此位移量即作為轉移指令的一部分被取入被取入CPU中。中。 執(zhí)行轉移指令時
27、,將這個位移量加到執(zhí)行轉移指令時,將這個位移量加到IP上即可得到轉上即可得到轉移地址移地址(標號的值標號的值),即即 IP+(標號標號-IP)=標號標號=轉移地址轉移地址不必為找這個轉移地址再去訪問寄存器或存儲器。不必為找這個轉移地址再去訪問寄存器或存儲器。 例如,如果例如,如果L是本段中的標號,則下述指令采用的是是本段中的標號,則下述指令采用的是段內直接轉移方式:段內直接轉移方式: JMP L; 機器指令中的位移量為機器指令中的位移量為L-IP,轉移地址為,轉移地址為L (2) 段內間接轉移段內間接轉移(間接近轉移間接近轉移) 寄存器操作數寄存器操作數(也稱寄存器尋址也稱寄存器尋址) 例:例
28、: JMP BX ; BX的內容為轉移地址的內容為轉移地址 存儲器操作數存儲器操作數(也稱存儲器尋址也稱存儲器尋址)(i) 直接尋址直接尋址 其特征是:其特征是: 轉移地址轉移地址(偏移地址部分偏移地址部分)在數據存儲單元在數據存儲單元中,數據存儲單元的地址在指令中直接給出。中,數據存儲單元的地址在指令中直接給出。例如,例如,JMP WORD PTR DS:20;數據存儲單元數據存儲單元(DS:20)的一個字為轉移地址的一個字為轉移地址(ii) 寄存器間接尋址寄存器間接尋址其特征是其特征是: 轉移地址轉移地址(偏移地址部分偏移地址部分)在數據存儲單元在數據存儲單元中,數據存儲單元的偏移地址在中
29、,數據存儲單元的偏移地址在BX、BP、SI、DI之之一中。一中。例如,下述指令采用的就是段內間接轉移、寄存器間例如,下述指令采用的就是段內間接轉移、寄存器間接尋址方式接尋址方式:JMPBX ;數據存儲單元數據存儲單元(DS:BX)的一個字為轉移地址的一個字為轉移地址 JMPBP ;數據存儲單元數據存儲單元(SS:BP)的一個字為轉移地址的一個字為轉移地址JMP DS:BP ;數據存儲單元數據存儲單元(DS:BP)的一個字為轉移地址的一個字為轉移地址 (iii) 寄存器相對尋址寄存器相對尋址 其特征是其特征是:轉移地址:轉移地址(偏移地址部分偏移地址部分)在數據存在數據存儲單元中,數據存單元的偏
30、移地址是寄存器儲單元中,數據存單元的偏移地址是寄存器(BX、BP、SI、DI之一之一)的內容與位移量的和。的內容與位移量的和。例如,下述指令采用的就是段內間接轉移、寄存器相例如,下述指令采用的就是段內間接轉移、寄存器相對尋址方式:對尋址方式: JMPBX+20 ;數據存儲單元數據存儲單元(DS:BX+20)的一個字為轉移地的一個字為轉移地址址 JMPBP+20 ;數據存儲單元數據存儲單元(SS:BP+20)的一個字為轉移地址的一個字為轉移地址JMP DS:BP+20 ;數據存儲單元數據存儲單元(DS:BP+20)的一個字為轉移地的一個字為轉移地 址址(iv) 基址變址尋址基址變址尋址 其特征是
31、:其特征是:轉移地址轉移地址(偏移地址部分偏移地址部分)在數據存在數據存儲單元中,數據存儲單元的偏移地址是基址寄儲單元中,數據存儲單元的偏移地址是基址寄存器存器(BX、BP之一之一)的內容和變址寄存器的內容和變址寄存器(SI、DI之一之一)的內容之和。的內容之和。例如,下述指令采用的就是段內間接轉移、基例如,下述指令采用的就是段內間接轉移、基址變址尋址方式址變址尋址方式: JMPBX+SI ;數據存儲單元數據存儲單元(DS:BX+SI)的一個字為轉移地址的一個字為轉移地址 JMPBP+SI ;數據存儲單元數據存儲單元(SS:BP+SI)的一個字為轉移地址的一個字為轉移地址 JMP DS:BP+
32、SI ;數據存儲單元數據存儲單元(DS:BP+SI)的一個字為轉移地址的一個字為轉移地址(v) 基址變址相對尋址基址變址相對尋址 其特征是:其特征是: 轉移地址轉移地址(偏移地址部分偏移地址部分)在數據存在數據存儲單元中,數據存儲單元的偏移地址是基址寄儲單元中,數據存儲單元的偏移地址是基址寄存器存器(BX、BP之一之一)的內容、變址寄存器的內容、變址寄存器(SI、DI之一之一)的內容及位移量的和。的內容及位移量的和。例如,下述指令采用的就是段內間接轉移、寄例如,下述指令采用的就是段內間接轉移、寄存器間接尋址方式存器間接尋址方式: JMPBX+SI+20 ;數據存儲單元數據存儲單元(DS:BX+
33、SI+20)的一個字為轉移地址的一個字為轉移地址JMPBP+SI+20 ;數據存儲單元數據存儲單元(SS:BP+SI+20)的一個字為轉移地址的一個字為轉移地址 JMP DS:BP+SI+20 ;數據存儲單元數據存儲單元(DS:BP+SI+20)的一個字為轉移地址的一個字為轉移地址(3) 段間直接轉移段間直接轉移(直接遠轉移直接遠轉移)轉移地址轉移地址(通常就是遠標號通常就是遠標號)直接包含在匯編形直接包含在匯編形式的轉移類指令中,也直接存放在轉移類指令式的轉移類指令中,也直接存放在轉移類指令的機器代碼中,它是轉移類指令不可分割的一的機器代碼中,它是轉移類指令不可分割的一部分,位于轉移類指令的
34、操作碼之后。部分,位于轉移類指令的操作碼之后。 高字高字存放轉移地址的存放轉移地址的段基值段基值部分,部分,低字低字存放轉存放轉移地址的移地址的偏移地址偏移地址部分。在取轉移類指令時,部分。在取轉移類指令時,此段基值和偏移地址作為轉移類指令的一部分此段基值和偏移地址作為轉移類指令的一部分被取入被取入CPU中,執(zhí)行轉移類指令時,不必為找中,執(zhí)行轉移類指令時,不必為找轉移地址再去訪問寄存器或存儲器。轉移地址再去訪問寄存器或存儲器。 例如,如果例如,如果L是其他代碼段中的標號,則下述是其他代碼段中的標號,則下述指令采用的就是段間直接轉移方式:指令采用的就是段間直接轉移方式: JMP FAR PTR
35、L ;在在L左邊通常要加上類左邊通常要加上類型說明型說明FAR PTR(4) 段間間接轉移段間間接轉移(間接遠轉移間接遠轉移) 段間間接轉移時的轉移地址既包含偏移地址部分,又段間間接轉移時的轉移地址既包含偏移地址部分,又包含段基值部分,在數據存儲器中占兩個字:低字單包含段基值部分,在數據存儲器中占兩個字:低字單元存放偏移地址,高字單元存放段基值。元存放偏移地址,高字單元存放段基值。 要在轉移類指令中的地址表達式左邊加上類型說明要在轉移類指令中的地址表達式左邊加上類型說明DWORD PTR。例如,。例如, JMP DWORD PTR B ;1 直接尋址直接尋址JMP DWORD PTR DS:2
36、0 ;2 直接尋址直接尋址JMP DWORD PTR BX ;3 寄存器間接尋址寄存器間接尋址JMP DWORD PTR BX+B ;4 寄存器相對尋址寄存器相對尋址JMP DWORD PTR BX+20 ;5 寄存器相對尋址寄存器相對尋址JMP DWORD PTR BX+SI ;6 基址變址尋址基址變址尋址JMP DWORD PTR BX+SI+B ;7 基址變址相對尋址基址變址相對尋址JMP DWORD PTR BX+SI+20 ;8 基址變址相對尋址基址變址相對尋址 指令轉移地址寄存器(1)直接轉移轉移地址指令寄存器(2)寄存器間接轉移圖圖4-2 轉移地址的尋址方式的尋址過程轉移地址的尋
37、址方式的尋址過程(1)EA轉移地址指令存儲器(3)直接尋址寄存器EA指令寄存器(4)寄存器間接尋址轉移地址存儲器圖圖4-2 轉移地址的尋址方式的尋址過程(轉移地址的尋址方式的尋址過程(2)轉移地址存儲器地址寄存器寄存器指令位移量+EA(5)寄存器相對尋址圖圖4-2 轉移地址的尋址方式的尋址過程(轉移地址的尋址方式的尋址過程(3)圖圖4-2 轉移地址的尋址方式的尋址過程(轉移地址的尋址方式的尋址過程(4)轉移地址存儲器基地址寄存器基址寄存器指令變址寄存器+EA(6)基址變址尋址變址值寄存器圖圖4-2 轉移地址的尋址方式的尋址過程(轉移地址的尋址方式的尋址過程(5)轉移地址存儲器基地址寄存器基址寄
38、存器指令變址寄存器+EA(7)基址變址相對尋址變址值寄存器位移量4.1.2 8086 指令系統(tǒng)指令系統(tǒng)可以分為以下可以分為以下6類:類: 傳送指令傳送指令 算術運算指令算術運算指令 邏輯運算和移位指令邏輯運算和移位指令 串操作指令串操作指令 轉移指令轉移指令 處理器控制指令處理器控制指令一、傳送指令一、傳送指令包括包括:通用傳送指令通用傳送指令和和專用傳送指令專用傳送指令兩類兩類通用傳送指令:通用傳送指令: 名稱格式類型操作傳送交換入棧出棧MOV 目的,源XCHG 操作數1,操作數2PUSH 源字 POP 目的字B/WB/WWW(目的)(源)(操作數1) (操作數2)SP SP-2, (SS:
39、SP) (源)字(目的)字 (SS:SP), SP SP+2(1) MOV 指令指令 立即數存儲器存儲器直接尋址直接尋址寄存器間接尋址寄存器間接尋址寄存器相對尋址寄存器相對尋址基址變址尋址基址變址尋址基址變址相對尋址基址變址相對尋址通用寄存器通用寄存器AX BX CX DXSI DI SP BPAL BL CL DLAH BH CH DH段寄存器DSESSSCS例例: MOV AL, BL MOV DI, AX MOV CX, DS:1000H MOV BL, 40 MOV WORD PTRSI , 01H BYTE PTR 字節(jié)長度標記字節(jié)長度標記WORD PTR 字長度標記字長度標記DWO
40、RD PTR 雙字長度標記雙字長度標記 標志:所有通用傳送指令都不影響標志位。標志:所有通用傳送指令都不影響標志位。 練習練習1用用MOV指令實現兩內存字節(jié)單元內容的交換指令實現兩內存字節(jié)單元內容的交換 2035H 2045H 01H . 02H用直接尋址方式實現用直接尋址方式實現 MOV BL, DS:2035H MOV CL, DS:2045H MOV DS:2045H, BL MOV DS:2035H, CL HLT用寄存器間接尋址方式實現用寄存器間接尋址方式實現 MOV SI , 2035H MOV DI, 2045H MOV AH, SI MOV AL, DI MOV DS:2035
41、H ,AL MOV DS:2045H ,AH 練習練習2把數據塊把數據塊BLOCK1移到移到BLOCK2 2040H 2060H 把把2040H地址開始的地址開始的10個字節(jié)數據移到個字節(jié)數據移到2060地地址開始的址開始的10個字節(jié)單元處。個字節(jié)單元處。 BLOCK1BLOCK2 ANSWER MOV SI, 2040H MOV DI, 2060H MOV CX, 0AH LOOP1: MOV BL, SI+09H; MOV DI+09H,BL ; DEC SI DEC DI DEC CX JNZ LOOP1 HLT 練習練習3把把2040H地址開始的地址開始的10個字節(jié)單元的內容與個字節(jié)單
42、元的內容與2060H地址開始的地址開始的10個字節(jié)單元內容互換。個字節(jié)單元內容互換。MOV BL,SI+09HMOV AL,DI+09HMOV SI+09H,ALMOV DI+09H,BL(2) PUSH指令和指令和POP指令指令 堆棧的圖示: 壓入壓入:格式 PUSH SRC (SS) 先修改指針: SP SP-2 后壓入: (SP+1,SP) SRC(SP) 彈出彈出:格式 POP DST 棧頂 先彈出:DST (SP+1,SP) 壓 彈 后修改指針:SP SP+2 入 出高地址 棧底 最后一項(3)XCHG指令(交換指令)指令(交換指令)格式:格式:XCHG OPR1, OPR2操作:操
43、作:OPTR1 OPTR2標志:標志:O D I T S Z A P C - - - - - - - - -例例:XCHG AL , BL XCHG BX,CX XCHG DS:2530H, CX XCHG指令允許的操作數及數據傳送方向指令允許的操作數及數據傳送方向 存儲器存儲器直接尋址直接尋址寄存器間接尋址寄存器間接尋址寄存器相對尋址寄存器相對尋址基址變址尋址基址變址尋址基址變址相對尋址基址變址相對尋址通用寄存器通用寄存器AX BX CX DXSI DI SP BPAL BL CL DLAH BH CH DH 練習練習用用XCHG指令改進指令改進前面的數據塊交換程序:前面的數據塊交換程序:
44、MOV BL , SI +09H XCHG BL , DI+09H MOV SI+09H , BL MOV BL,SI+09HMOV AL,DI+09HMOV SI+09H,ALMOV DI+09H,BL2. 專用傳送指令專用傳送指令專用傳送指令有專用傳送指令有15條,可分為條,可分為標志傳送、查表、標志傳送、查表、地址傳送、符號擴展、輸入地址傳送、符號擴展、輸入/輸出和串傳送類輸出和串傳送類共六種,它們的名稱、書寫格式、完成的操作共六種,它們的名稱、書寫格式、完成的操作及操作類型如下表所示。及操作類型如下表所示。 專用傳送指令專用傳送指令 (1)名稱格式類型操作標標志志傳傳送送標志入棧標志入
45、棧PUSHF WSP SP-2, (SS:SP) Flag出棧到標志出棧到標志POPF WFlag(SS:SP), SP SP+2標志送標志送AHLAHFBAHFlag低低8位位AH送標志送標志SAHFBFlag低低8位位 AH查查表表查表查表XLAT或或XLATBXLAT 段寄存器:變量名段寄存器:變量名BBAL (DS:BX+AL)AL (段寄存器:段寄存器:BX+AL)地地址址傳傳送送傳送有效地址傳送有效地址LEA 16位位Reg, Mem W16位位 RegMem的有效地的有效地址址地址指針送寄地址指針送寄存器及存器及DSLDS 16位位Reg, 雙字雙字 Mem W16位位 Reg(
46、Mem)低字低字DS (Mem)高字高字地址指針送寄地址指針送寄存器及存器及ESLES 16位位Reg, 雙字雙字 Mem W16位位Reg (Mem)低字低字ES (Mem)高字高字專用傳送指令專用傳送指令 (2) 續(xù)表名稱名稱格式格式類型類型操作操作符號符號擴展擴展字節(jié)擴展為字字節(jié)擴展為字字擴展為雙字字擴展為雙字CBWCWDB WAH的各位的各位AL的最高位的最高位DX的各位的各位AX的最高位的最高位輸入輸入輸出輸出 輸入輸入IN Ac, 端口號端口號B/WAc (端口端口), 端口號:端口號:00FFHIN Ac, DXB/WAc (DX), DX:00FFFFH 輸出輸出 OUT 端口
47、號端口號, AcB/W(端口端口) Ac , 端口號:端口號:00FFHOUT DX, AcB/W(DX)Ac, DX:00FFFFH 專用傳送指令專用傳送指令 (3) 續(xù)表名稱名稱格式格式類型類型操作操作串串傳傳送送類類串傳送串傳送MOVSBB(ES:DI)字節(jié)字節(jié) (DS:SI)字節(jié)字節(jié)DF=0時時 SISI+1, DIDI+1DF=1時時 SISI- 1, DIDI -1MOVSWW(ES:DI)字字 (DS:SI)字字DF=0時時 SISI+2, DIDI+2DF=1時時 SISI- 2, DIDI -2*MOVS 目的,源目的,源B/W略略串存儲串存儲(存入串存入串)STOSBB(E
48、S:DI)AL若若DF=0, 則則DIDI+1若若DF=1, 則則DIDI- 1STOSWW(ES:DI)AX若若DF=0, 則則DIDI+2若若DF=1, 則則DIDI- 2*STOS 目的目的B/W略略專用傳送指令專用傳送指令 (4) 續(xù)表名稱名稱格式格式類型類型操作操作串串傳傳送送類類串裝入串裝入(從串取從串取)LODSBBAL (DS:DI)若若DF=0, 則則SISI+1若若DF=1, 則則SISI- 1LODSWWAX (DS:DI)若若DF=0, 則則SISI+2若若DF=1, 則則SISI- 2*LODS 源源B/W略略(1)標志傳送指令標志傳送指令標志傳送指令共標志傳送指令共
49、4條:條: PUSHF POPF LAHF ;AH Flag的低的低8位位 SAHF ;Flag的低的低8位位 AH例:例:將將8086 標志寄存器的標志寄存器的TF位置位置 “1”(2)查表指令查表指令查表指令查表指令XLAT將以將以BX+AL為偏移地址的內存為偏移地址的內存單元中的一個字節(jié)送到單元中的一個字節(jié)送到AL中。中。在使用在使用XLAT指令前,應先在內存中建立一個指令前,應先在內存中建立一個字節(jié)數據表,字節(jié)數據表,表的首字節(jié)的偏移地址要事先存表的首字節(jié)的偏移地址要事先存入入BX,表中待查的數據相對于表開始處的位表中待查的數據相對于表開始處的位移量也要事先存入移量也要事先存入AL。
50、指令執(zhí)行時,會將指令執(zhí)行時,會將BX的內容與的內容與AL的內容相加,的內容相加,用得到的數作為偏移地址,以用得到的數作為偏移地址,以DS為段地址,將為段地址,將該地址處存儲單元中的內容該地址處存儲單元中的內容(字節(jié)字節(jié))取到取到AL中。中。 例如,例如,如果如果B為數據段中一組字節(jié)變量的開始地為數據段中一組字節(jié)變量的開始地址,則執(zhí)行下列程序段后,址,則執(zhí)行下列程序段后,AL=66H。 B DB 3FH, 06H, 5BH, 4FH, 66H ;數據段中的數據表 DB 6DH, 7DH, 07H, 7FH, 6FH MOV BX,OFFSET B ;使使BX中存放數據表首字節(jié)的偏移地址中存放數據
51、表首字節(jié)的偏移地址 MOV AL,4 ;使使AL中存放欲查單元的地址位移量中存放欲查單元的地址位移量4 XLAT ;查表得到的內容查表得到的內容(字節(jié)字節(jié))在在AL中中在此例中,數據表中存放的數據恰好是共陰極數碼管在此例中,數據表中存放的數據恰好是共陰極數碼管的輸入信號,所以,只要事先在的輸入信號,所以,只要事先在AL中放好一個十進制中放好一個十進制數碼數碼(09),就能通過上述程序段得到數碼管的相應輸,就能通過上述程序段得到數碼管的相應輸入信號。入信號。(3) 地址傳送指令地址傳送指令地址傳送指令有地址傳送指令有LEA、LDS和和LES共共3條條: LEA (Load Effective A
52、ddress) LDS (Load pointer into register and DS) LES (Load pointer into register and ES)(i)取有效地址指令)取有效地址指令格式:格式:LEA REG , SRC操作:操作:REG SRC 的有效地址的有效地址 *指令功能:指令功能: 將源操作數的有效地址將源操作數的有效地址EA傳送到目的操作數,傳送到目的操作數,目的操作數為一個目的操作數為一個16位的通用寄存器。位的通用寄存器。例:例:LEA BX , BX+DI+6H 若指令執(zhí)行之前若指令執(zhí)行之前(BX)=1000H, (DI)=0200H, 則則指令執(zhí)
53、行之后指令執(zhí)行之后, (BX)=1206H 注意與指令注意與指令MOV BX,BX+DI+6H功能上的功能上的區(qū)別區(qū)別 從變量的角度,從變量的角度,“LEA AX,VAR”指令傳送的指令傳送的是變量的地址,而是變量的地址,而“MOV AX,VAR”指令傳送指令傳送的是變量的值。的是變量的值。練習練習 如果如果TABLE為數據段中為數據段中0032H單元的符號名,單元的符號名,其中存放的內容為其中存放的內容為1234H,當執(zhí)行指令當執(zhí)行指令 “ MOV AX , TABLE”后,后, (AX)= ;而執(zhí)行指令而執(zhí)行指令 “ LEA AX , TABLE”后后, (AX) = 。 (ii) LDS
54、 REG , SRC操作:操作:REG (SRC) DS (SRC+2) 標志:標志:- - - - - - - - - 指令指令 功功 能能:將地址指針:將地址指針(共共4個字節(jié))裝入個字節(jié))裝入DS和另一個非段寄存器。其中:和另一個非段寄存器。其中: 前兩個字節(jié)前兩個字節(jié)(偏移量)偏移量) 非段寄存器非段寄存器 后兩個字節(jié)后兩個字節(jié)(段基址段基址) DS Example例例1. LDS DI , DS:2130H 設設(DS)=3000H 32130H DI DS 偏移量 段基址(iii) LES REG , SRC 操作:操作: REG (SRC) ES (SRC+2) * LDS和和L
55、ES指令為切換數據段提供了方便。指令為切換數據段提供了方便。(4) 符號擴展指令符號擴展指令符號擴展指令有符號擴展指令有CBW和和CWD共兩條。共兩條。 CBW指令將指令將AL中的中的8位帶符號數擴展為位帶符號數擴展為16位并送入位并送入AX中。中。實際上就是將實際上就是將AL的最高位送入的最高位送入AH的所有各位。的所有各位。CWD指令將指令將AX中的中的16位帶符號數擴展為位帶符號數擴展為32位并送入位并送入DX和和AX中中(其中其中DX存放高存放高16位,位,AX存放低存放低16位位)。實際上就是將實際上就是將AX的最高位送入的最高位送入DX的所有各位。的所有各位。CBW和和CWD兩條指
56、令通常只對帶符號數使用。兩條指令通常只對帶符號數使用。CBW指令只能對指令只能對AL的內容進行擴展,擴展后的內容進行擴展,擴展后AL的內的內容不變但占用容不變但占用AH;CWD指令只能對指令只能對AX的內容進行擴展,擴展后的內容進行擴展,擴展后AX的內的內容不變但占用容不變但占用DX。例如:例如:若若AX=379AH, 則執(zhí)行完則執(zhí)行完CBW指令后,指令后,AX=FF9AH,若執(zhí)行的是若執(zhí)行的是CWD指令,則指令,則DX=0000H,AX=379A H;若若AX=977AH, 則執(zhí)行完指令則執(zhí)行完指令CBW后,后,AX=007AH,若執(zhí)行的是若執(zhí)行的是CWD指令,則指令,則DX=FFFFH,A
57、X=977AH。(5) 輸入輸出指令輸入輸出指令 直接輸入輸出指令直接輸入輸出指令格式:格式:IN AL, PORT ;操作操作:AL (PORT) IN AX, PORT; AX (PORT+1,PORT) OUT PORT,AL; (PORT) AL OUT PORT,AX; (PORT+1,PORT) AX注:注:PORT為輸入輸出端口號,范圍為為輸入輸出端口號,范圍為0255(00FFH) I/O 接口的基本結構接口的基本結構cpu外外 圍圍 設設 備備 數據輸入寄存器數據輸入寄存器數據輸出寄存器數據輸出寄存器狀態(tài)寄存器狀態(tài)寄存器 控制寄存器控制寄存器中斷控制邏輯中斷控制邏輯數據總線數
58、據總線地址總線地址總線控制總線控制總線I/O接口接口間接輸入輸出指令間接輸入輸出指令格式:格式:IN AL, DX; 操作:操作:AL (DX) IN AX, DX; AX (DX+1,DX) OUT DX,AL; (DX) AL OUT DX,AX; (DX+1,DX) AX 在間接輸入輸出指令之前,需將在間接輸入輸出指令之前,需將端口號端口號 DX. MOV DX,XXXXH;輸入輸出指令的使用輸入輸出指令的使用IIN 指令指令:用于從數據端口輸入數據或從狀態(tài):用于從數據端口輸入數據或從狀態(tài)端口輸入狀端口輸入狀 態(tài)字態(tài)字. 例:例: IN AL , 28H; LOP : IN AL, 27
59、H; MOV DS:2000H ,AL; TEST AL,01H; JNZ LOP OOUT指令指令:用于輸出數據或命令給指定的用于輸出數據或命令給指定的I/O端口端口例例例例1 MOV AL , SI OUT 80H , AL ;設設80H為數據口的口地址為數據口的口地址例例2 MOV DX , 280H;設設280H為控制口的口地址為控制口的口地址 MOV AL , 01H OUT DX , AL(6) 串傳送類指令串傳送類指令串傳送類指令有串傳送類指令有MOVS、STOS 和和 LODS共共3條。條。第一條指令第一條指令:串傳送指令串傳送指令(MOVS)串傳送指令串傳送指令MOVS完成兩
60、個存儲單元之間的傳送,傳送完成兩個存儲單元之間的傳送,傳送后會自動修改有關的變址寄存器。后會自動修改有關的變址寄存器?!癕OVSB”指令將源存儲單元指令將源存儲單元(DS:SI)的的一個字一個字節(jié)節(jié)傳送到目的存儲單元傳送到目的存儲單元(ES:DI)的一個字節(jié)中。的一個字節(jié)中。若若DF=0,則傳送后,則傳送后SISI+1,DIDI+1;若;若DF=1,則,則傳送后傳送后SISI-1,DIDI-1。 “MOVSW”指令將源存儲單元指令將源存儲單元(DS:SI)的的一個一個字字傳送到目的存儲單元傳送到目的存儲單元(ES:DI)的一個字中。的一個字中。若若DF=0,則傳送后,則傳送后SISI+2,DI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四萬科高品質住宅區(qū)商品房買賣合同3篇
- 2024年首席運營官COO崗位聘任協(xié)議3篇
- 二零二四學校食堂特色菜系承包與研發(fā)合同3篇
- 2025年度企業(yè)并購重組財務盡職調查合同2篇
- 二零二五版礦產資源中介服務合同范本6篇
- 二零二五版?zhèn)€人與個人間消費信貸合同樣本3篇
- 2025年投標員實習報告撰寫與實習反饋優(yōu)化合同3篇
- 2024離婚協(xié)議范本:離婚法律事務處理參考樣式18篇
- 2025版旅行社民俗文化體驗游合同樣本3篇
- 年度調直機市場分析及競爭策略分析報告
- 一年級上學期20以內加減法混合運算(不包含進位加法和退位減法)
- 湘美版七年級上冊美術 2.卡通故事 教案( )
- 單位檔案三合一制度怎么寫范文
- 【課件】跨學科實踐:探索廚房中的物態(tài)變化問題-人教版八年級上冊物理
- GB 30254-2024高壓三相籠型異步電動機能效限定值及能效等級
- 房地產企業(yè)崗位招聘筆試題題庫之四(含答案)營銷副總經理
- 重大事故隱患判定標準與相關事故案例培訓課件
- 某集團下屬子公司年度經營績效管理辦法全套
- 2024-2030年中國汽車防撞梁行業(yè)發(fā)展動態(tài)與市場需求研究報告
- 高中語文新課標必背古詩文72篇
- 大學俄語一級課程考試試卷 (A 卷)
評論
0/150
提交評論