微機原理與接口技術(第3版)課件 第3章 8086指令系統-part1_第1頁
微機原理與接口技術(第3版)課件 第3章 8086指令系統-part1_第2頁
微機原理與接口技術(第3版)課件 第3章 8086指令系統-part1_第3頁
微機原理與接口技術(第3版)課件 第3章 8086指令系統-part1_第4頁
微機原理與接口技術(第3版)課件 第3章 8086指令系統-part1_第5頁
已閱讀5頁,還剩64頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微機原理與接口技術第3章8086/8088指令系統目錄3.1尋址方式3.2傳送指令3.3算術運算指令3.4邏輯運算指令3.5移位指令3.6處理器控制指令、標志位處理指令33.1尋址方式概述隱含于機器指令內處理的數據在什么地方?要處理的數據有多長?操作碼操作數……操作數指令的一般格式:微型計算機的組成部分有哪些?4操作碼操作數……操作數計算機要執行的操作(助記符)操作數本身操作數地址或地址的一部分指向操作數地址的指針其它有關操作數的信息如何尋找操作數就是尋址方式對應不同的尋址方式(7種)3.1尋址方式概述5符號含義REG,REG8,REG16寄存器,8位寄存器,16位寄存器SREG段寄存器MEM內存操作數idata立即數ACC累加器(AX,或者AH、AL)EA/SA

偏移地址/段地址符號約定3.1尋址方式概述63.1尋址方式概述AHALBHBLCHCLDHDL15870AX累加器BX基址寄存器CX計數寄存器DX數據寄存器通用寄存器DISIBPSP目的變址寄存器源變址寄存器基址指針寄存器堆棧指針寄存器指針寄存器變址寄存器FRIP標志寄存器指令指針寄存器CSDSSSES代碼段寄存器數據段寄存器堆棧段寄存器附加段寄存器段寄存器寄存器73.1尋址方式立即尋址一般形式匯編指令機器碼(低字節在前)用C語言描述MOVAX,10HB81000HAX=16MOVAL,28HB028HAL=40操作數直接放在指令中,緊跟在操作碼后,與操作碼一起放在代碼段源操作數目的操作數83.1尋址方式立即尋址舉例說明B8H10H00HB0H28H操作碼操作數操作碼操作數MOV AX,10HAHAL10H00HMOV AL,28HAL28H代碼段9立即數只能作源操作數,不能作目的操作數。立即數應與目的操作數的長度一致立即數默認采用十進制,采用十六進制數以“H”為后綴,2進制數以“B”為后綴。以十六進制形式出現的立即數,若以字母開頭,需以數字0為前綴。立即數只能是整數,不能是小數或其他類型的數據。注意事項MOV12H,AL

MOVAL,1234H

MOVBH,11MOVBH,11HMOVBH,00110101BMOVBH,0FFH3.1尋址方式立即尋址10一般形式匯編指令機器碼(低字節在前)用C語言描述指令執行前數據的位置

MOVAX,BXB9D8HAX=BXCPU內寄存器BXMOVAL,BL88DBHAL=BLCPU內寄存器BL操作數包含在CPU的內部寄存器中,如寄存器AX、BX、CX、DX等。寄存器可以是8位或者16位。3.1尋址方式寄存器尋址注意事項源操作數的長度必須與目的操作數一致。16位操作數:AX,BX,CX,DX,DI,SI,SP和BP等8位操作數:AH,AL,BH,BL,CH,CL,DH和DL兩個操作數不能同時為段寄存器目的操作數不能為CSMOVBX,AL

MOVSS,DS

MOVCS,AX

3.1尋址方式寄存器尋址12一般形式匯編指令機器碼(低字節在前)指令執行前數據的位置

MOVAX,[2]A10200H內存的DS:2~3單元MOVAL,[2]A00200H內存的DS:2單元MOVBX,ES:[2]8B1E0200H

內存的ES:2~3單元

操作數在內存中,指令中以具體數值的形式(在[]中)給出操作數所在單元的有效地址EA。邏輯地址為段地址(SA):偏移地址(EA)。一般是代碼段以外的內存空間段前綴3.1尋址方式直接尋址13舉例說明A0H02H00H1234操作碼代碼段567810000H20000H20001H20002H20003H地址低位地址高位數據段2000HDSMOV AL,[0002H]20000H+0002H20002H偏移量左移4位(

16)AL56H字節地址8位操作數(字節型)3.1尋址方式直接尋址舉例說明16位操作數(字型)A1H02H00H1234操作碼代碼段567810000H20000H20001H20002H20003H地址低位地址高位數據段2000HDSMOV AX,[0002H]20000H+0002H20002H偏移量左移4位AL56HAH78H字地址3.1尋址方式直接尋址15一般形式操作數在內存中操作數的16位EA包含在寄存器SI、DI、BP、BX中為了區別于寄存器尋址方式,指令中指定的寄存器名要用“[]”括起來。例如[SI]一般是代碼段以外的內存空間MOV AX,[BX]MOV AX,BX寄存器尋址寄存器間接尋址3.1尋址方式寄存器間接尋址16操作數物理地址計算分成兩種情況:以SI、DI、BX間接尋址,則通常操作數在現行數據段區域中,此時DS×16+REG為操作數的地址,REG表示寄存器可以是SI、DI、BX。以寄存器BP間接尋址,操作數在堆棧段中。即SS×16+BP作為操作數的地址。易錯MOV AX,[BX];物理地址=DS×16+BXMOV AX,[BP];物理地址=SS×16+BP3.1尋址方式寄存器間接尋址17舉例說明B8H04H1234操作碼代碼段567810000H21000H21001H21002H21003H數據段2000HDSMOV AX,[SI]20000H+1000H21000H左移4位MOV SI,1000H1000HSIAL12HAH34H3.1尋址方式寄存器間接尋址18寄存器相對尋址操作數在內存中,由指定的寄存器內容,加上指令中給出的8位或16位偏移量作為操作數的偏移地址。寄存器為四個寄存器SI、DI、BX、BP之一尋址方式含義[BX+idata]/idata[BX]EA=BX+idata,SA=DS[SI+idata]/idata[SI]EA=SI+idata,SA=DS[DI+idata]/idata[DI]EA=DI+idata,SA=DS[BP+idata]/idata[BP]EA=BP+idata,SA=SS3.1尋址方式寄存器相對尋址19舉例說明B8H47H011234操作碼代碼段567810000H21000H21001H21002H21003H數據段2000HDSMOV AX,[BX+1]20000H1000H21001Hx16MOV BX,1000H1000HBXAL34HAH56H+0001H3.1尋址方式寄存器相對尋址20

一般形式操作數在內存中其偏移地址由“基址寄存器”+“變址寄存器”形成基址寄存器——BX(DS),BP(SS)變址寄存器——SI、DI尋址方式含義[BX+SI]/[BX][SI]EA=BX+SI,SA=DS[BX+DI]/[BX][DI]EA=BX+DI,SA=DS[BP+SI]/[BP][SI]EA=BP+SI,SA=SS[BP+DI]/[BP][DI]EA=BP+DI,SA=SS3.1尋址方式基址加變址尋址21舉例說明8BH00H1234操作碼代碼段567810000H21000H21001H21002H21003H數據段2000HDSMOV AX,[BX+SI]20000H1000H21001H左移4位MOV BX,1000H1000HBXAL34HAH56H+0001HMOV SI,0001H0001HSI3.1尋址方式基址加變址尋址22

一般形式操作數在內存中偏移地址:基址寄存器+變址寄存器+相對偏移量尋址方式含義[BX+SI+idata]/idata[BX][SI]EA=BX+SI+idata,SA=DS[BX+DI+idata]/idata[BX][DI]EA=BX+DI+idata,SA=DS[BP+SI+idata]/idata[BP][SI]EA=BP+SI+idata,SA=SS[BP+DI+idata]/idata[BP][DI]EA=BP+DI+idata,SA=SS3.1尋址方式相對基址加變址尋址23舉例說明8BH40H01H1234操作碼代碼段567810000H21000H21001H21002H21003H數據段2000HDSMOV AX,[BX+SI+1]20000H1000H21002H左移4位MOV BX,1000H1000HBXAL56HAH78H0001HMOV SI,0001H0001HSI+0001H3.1尋址方式相對基址加變址尋址直接尋址方式開始的尋址方式中,操作數都存放在除代碼段以外的內存區域中。求操作數所在的有效地址,取得操作數。[idata]用一個常量來表示地址,可以用于直接定位一個內存單元;實際程序設計中多使用符號地址,直接地址不加方括號,類似于變量名。NUMDW3556

MOVAX,NUM是直接尋址變量定義,詳見4.1.4節3.1尋址方式尋址方式小結內存操作數MEM變量名對應直接尋址3.1尋址方式尋址方式小結直接尋址方式開始的尋址方式中,操作數都存放在除代碼段以外的內存區域中。求操作數所在的有效地址,取得操作數。[BX]用一個變量來表示內存地址,可以用于間接定位一個內存單元;26適用于對一串存儲器操作數處理的程序(數組的訪問),多為循環結構。

將數組的首地址存儲寄存器(設置地址指針)MOVBX,1234HMOVAL,[BX]修改地址指針,加1INCBX3.1尋址方式尋址方式小結內存操作數MEM直接尋址方式開始的尋址方式中,操作數都存放在除代碼段以外的內存區域中。求操作數所在的有效地址,取得操作數。[BX+idata]用一個變量和常量來表示地址,可以在一個起始地址的基礎上用變量間接定位一個內存單元;27適用于對一串存儲器操作數處理的程序(數組的訪問),多為循環結構。將數組首地址以常量表示,地址指針初值為0MOVBX,0MOVAL,ARRAY[BX]修改地址指針,加1INCBX3.1尋址方式尋址方式小結內存操作數MEM直接尋址方式開始的尋址方式中,操作數都存放在除代碼段以外的內存區域中。求操作數所在的有效地址,取得操作數。[BX+SI]用兩個變量表示地址;[BX+SI+idata]用兩個變量和一個常量表示地址。適用于有行和列的二維表格數據,2個變量一個對應于行,一個對應于列。3.1尋址方式尋址方式小結內存操作數MEM帶[]地址表達式必須遵守下列規則:由于方括號有相加的含義,下面幾種方法是等價的6[BX][SI] [BX+6][SI] [BX+SI+6]6[BX+SI]若[]內包含BP,則隱含使用SS來提供基地址,物理地址=SS16+EA其余情況隱含使用DS提供基地址段超越前綴的使用MOVAX,DS:[BP]物理地址=DS16+BP3.1尋址方式尋址方式小結目錄3.1尋址方式3.2傳送指令3.3算術運算指令3.4邏輯運算指令3.5移位指令3.6處理器控制指令、標志位處理指令31主要內容MOV指令棧指令交換指令累加器專用傳送指令地址傳送指令標志位傳送指令3.2傳送指令32MOV指令指令格式格式:MOVdst,src

功能:dst←src說明:MOV是操作碼,dst和src分別是目的操作數和源操作數。指令格式舉例MOVREG,idataMOVAX,8MOVREG,REGMOVBX,AXMOVREG,MEMMOVAX,[0000H]MOVMEM,REGMOV[0000H],AX內存操作數(后5種尋址方式)3.2傳送指令33指令格式格式:MOVdst,src

功能:dst←src說明:MOV是操作碼,dst和src分別是目的操作數和源操作數。指令格式舉例MOVSREG,REGMOVDS,AXMOVREG,SREGMOVAX,DSMOVSREG,MEMMOVDS,[0000H]MOVMEM,SREGMOV[0000H],DSMOVMEM,idataMOVBYTEPTR[0000H],01H偽指令(4.1節)聲明操作數為字節型MOV指令3.2傳送指令34指令運行傳送數據的途徑存儲器MEM立即數idata段寄存器CS,DS,ES,SS通用寄存器AX,AHBX,ALCX,BHDX,BLSI,CHDI,CLSP,DHBP,DL16位8位CS不能作為目的操作數MOV指令3.2傳送指令MOV指令3.2傳送指令35立即數和CS只能作為源操作數IP和FLAGS都不允許作為源操作數和目的操作數立即數不允許直接送至DS,ES,SS或CS源操作數和目的操作數不能同時是內存操作數源操作數和目的操作數必須類型相同(同為字節或字類型)注意36存儲器傳送指令中,不允許對CS和IP進行操作;不允許兩個存儲器操作數之間直接進行信息傳送兩個段寄存器之間不能直接傳送信息,也不允許用立即尋址方式為段寄存器賦初值目的操作數,不能用立即尋址方式;操作數類型要匹配,字對字,字節對字節傳送。MOVIP,0010HMOVCS,AXMOV[1230H],[0010H]MOVAX,[0010H],MOV[1230H],AXMOVDS,SSMOVDS,1000HMOV1234H,AXMOVBX,ALMOV指令3.2傳送指令37主要內容3.2傳送指令MOV指令棧指令交換指令累加器專用傳送指令地址傳送指令標志位傳送指令38棧的訪存特性3.2傳送指令所謂棧是在存儲器中開辟一個區域,用來存放需要暫時保存的數據,其工作方式是“先進后出”或“后進先出”的方式。1234棧底棧頂8086系統中的堆棧段是由段定義語句在存儲器中定義的一個段,堆棧段容量小于等于64K字節。

段基址由堆棧段寄存器SS指定,棧頂由堆棧指針SP指定。第4章8086的棧是遞減型的“滿”棧。39棧的訪存特性CPU如何知道哪一段內存空間作為棧空間使用?CPU如何知道棧頂的位置?提示:寄存器SS和SP的作用是什么1250:0000H1250:0052H…1250:0051H1250:0050H24H56H…1250:0100H棧底SS:SPSS:堆棧段段寄存器SP:堆棧指針寄存器棧頂物理地址=SS16+SP

圖中棧頂物理地址是多少?3.2傳送指令40CSDSSSESIP內部寄存器∑123456指令隊列緩沖器總線接口部件(BIU)8位16位20位地址總線外部總線輸入輸出控制電路例(補):

給定一堆棧區,其地址為1250H:0000H~1250H:00FFH,SP=0052H,請問:

(1)棧頂地址的值;(2)棧底地址的值;(3)SS的值;(4)若存入數據2456H,在堆棧區如何放置,此時SP的值是多少?棧頂的邏輯地址為SS:SP,物理地址=SS16+SP棧頂地址:邏輯地址

1250H:0052H物理地址=1250H16+0052H=12552H棧底地址:在棧空間最大地址單元的下一個地址(不屬于堆棧)物理地址=1250H16+00FFH+1=12600H8086的棧是遞減型的“滿”堆棧。(1)棧底在高地址端1250:0000H1250:00FFH……1250:0100H棧底棧的訪存特性3.2傳送指令41CSDSSSESIP內部寄存器∑123456指令隊列緩沖器總線接口部件(BIU)8位16位20位地址總線外部總線輸入輸出控制電路例(補):

給定一堆棧區,其地址為1250H:0000H~1250H:00FFH,SP=0052H,請問:

(1)棧頂地址的值;(2)棧底地址的值;(3)SS的值;(4)若存入數據2456H,在堆棧區如何放置,此時SP的值是多少?1250:0000H1250:0052H…1250:0051H1250:0050HSPSP=0050H棧頂指針向低地址方向移動2個字節(SP←SP

-2),字數據的存放根據小尾順序:低字節存放在低地址,高字節存放在高地址24H56H…1250:0100H8086的棧是遞減型的“滿”堆棧。(2)向低地址端生長棧底存放字數據棧的訪存特性3.2傳送指令42CSDSSSESIP內部寄存器∑123456指令隊列緩沖器總線接口部件(BIU)8位16位20位地址總線外部總線輸入輸出控制電路例(補):

給定一堆棧區,其地址為1250H:0000H~1250H:00FFH,SP=0052H,請問:

(1)棧頂地址的值;(2)棧底地址的值;(3)SS的值;(4)若存入數據2456H,在堆棧區如何放置,此時SP的值是多少?1250:0000H1250:0052H…1250:0051H1250:0050H24H56H…1250:0100H棧底SP

當前棧中有多少字節數據?棧底地址?棧頂地址=0100H?0050H =0B0H棧的訪存特性3.2傳送指令43棧指令

PUSH指令格式:PUSHsrc功能:將字類型的源操作數src壓入堆棧指令格式說明PUSHREG將一個寄存器中的數據入棧PUSHSREG將一個段寄存器中的數據入棧PUSHMEM將內存單元處的字入棧字類型16位寄存器3.2傳送指令44棧指令

PUSH指令PUSHsrc

的執行過程①SP←SP

2;②將src送入SS:SP指向的內存單元中,此時SS:SP指向新棧頂。例3.2-1:設將20000H~2000FH這段內存區間用做棧,分析依次指令一下前后堆棧的變化情況。PUSHAXPOPBX1234HAX20000H2000AH2000BH2000CH2000DH2000EH2000FH20010HSS:SP12H34H棧底棧空間的使用是從高地址往低地址方向的。目的操作數由SS:SP隱含指出空棧的棧頂和棧底是重合的3.2傳送指令45棧指令

PUSH指令格式:PUSHsrc功能:將字類型的源操作數src壓入堆棧指令格式說明PUSHREG將一個寄存器中的數據入棧PUSHSREG將一個段寄存器中的數據入棧PUSHMEM將內存單元處的字入棧字類型16位字數據SS:SP棧底分析指令:PUSH[0200H]已知DS=1600H物理地址=1600H16+0200H=16200H20000H2000AH2000BH2000CH2000DH2000EH2000FH20010H12H34H56H78H16200H16201H56H78H3.2傳送指令46棧指令

POP指令格式:POPdst功能:將當前棧頂的一個字送到目的操作數dst中指令格式說明POPREG將棧頂的數據送入一個寄存器中POPSREG將棧頂的數據送入一個段寄存器中(不能是CS)POPMEM將棧頂的字數據送入內存單元字為什么POP指令的目的操作數不能是CS3.2傳送指令47棧指令

POP指令POPdst

的執行過程①將SS:SP指向的內存單元中的一個字數據送入dst中②SP←SP+2,SS:SP指向新棧頂。例3.2-1:設將20000H~2000FH這段內存區間用做棧,分析依次指令一下前后堆棧的變化情況。PUSHAXPOPBX

BHBL20000H2000AH2000BH2000CH2000DH2000EH2000FH20010HSS:SP12H34H12H34H已不屬于堆棧棧底源操作數由SS:SP隱含指出位于棧頂和棧底之間存放的數據,邏輯上屬于棧元素3.2傳送指令48棧指令例3.2-2:對比下圖所示的兩段指令,分析它們的功能。MOVAX,2000HMOVDS,AXMOVAX,1234HMOV[0000H],AXMOV AX,2000HMOV SS,AXMOV SP,2MOV AX,1234HPUSHAX2000HAX2000HDS1234HAXDS:020000H20001H20002H20003H12H34H2000HAX2000HSS0002HSPSS:SP20000H20001H20002H20003H1234HAX12H34H3.2傳送指令49棧指令棧指令與MOV指令的區別PUSH和POP指令訪問的內存單元地址不是在指令中給出的,而是由SS:SP指出的;CPU執行MOV指令只需要一步操作;而執行PUSH和POP指令則要分兩步:PUSH:先修改SP,然后向SS:SP傳送數據;POP:先取SS:SP處的數據,后改變SP。MOV[1234H],BXPUSHBX3.2傳送指令50主要內容3.2傳送指令MOV指令棧指令交換指令累加器專用傳送指令地址傳送指令標志位傳送指令51交換指令3.2傳送指令指令格式舉例XCHGREG,REGXCHGCL,BLXCHGREG,MEMXCHGBX,[0]XCHGMEM,REGXCHG[0],BX格式:XCHGdst,src功能:dst?src,即把一個字節或一個字的源操作數與目的操作數相交換。段寄存器和立即數不能作為一個操作數,不能在累加器之間進行。注意XCHGAH,AL

52分析:

交換兩個內存操作數,需要使用一個寄存器作為臨時存儲容器,并把MOV和XCHG指令結合使用。MOV AX,[0100H]XCHGAX,[1000H]MOV [0100H],AX

如何用堆棧實現同樣的功能?例3.2-3:編寫指令實現DS:[0100H]和DS:[1000H]處兩個字的交換。3.2傳送指令交換指令53MOV AX,[0100H]XCHGAX,[1000H]MOV [0100H],AX

例3.2-3:編寫指令實現[0100H]和[1000H]處兩個字的交換。DS:0100HDS:1000HDS:0101HDS:1001H…34H12H78H56H12H34H56H78H棧底棧頂PUSH[0100H]PUSH[1000H]POP[0100H]POP[1000H]56H78H12H34H使用堆棧實現:3.2傳送指令交換指令54主要內容3.2傳送指令MOV指令棧指令交換指令累加器專用傳送指令地址傳送指令標志位傳送指令55累加器專用傳送指令

IN指令從I/O端口輸入數據至AL或AX指令格式含義INAL,portAL←portINAX,portAH←port+1,AL←portINAL,DXAL←(DX)INAX,DXAH←(DX+1),AL←(DX)若端口地址超過255時,則必須用DX保存端口地址,這樣用DX作端口尋址最多可尋找64K個端口。≤2553.2傳送指令56累加器專用傳送指令

IN指令從I/O端口輸入數據至AL或AX若端口地址超過255時,則必須用DX保存端口地址,這樣用DX作端口尋址最多可尋找64K個端口。INAL,43H端口地址小于255時或者MOV

DX,43HIN

AL,DX端口地址大于255時必須MOV

DX,1243HIN

AL,DX3.2傳送指令57累加器專用傳送指令

OUT指令將AL或AX中的內容傳送到一個輸出端口指令格式含義OUTport,ALAL→portOUTport,AXAH→port+1,AL→portOUTDX,ALAL→(DX)OUTDX,AXAH→(DX+1),AL→(DX)接口部分(教材第6章時再深入學習)3.2傳送指令58累加器專用傳送指令

XLAT指令格式:XLAT

;AL←(DS×16+BX+AL)要求:①寄存器AL的內容作為一個256字節的表的下標;②表的基地址在BX中;③轉換后的結果存放在AL中.功能:將數據段中偏移地址為BX+AL的對應內存單元中的一個字節送入AL,從而實現AL中的字節變換。0~2558位表中首元素在段內的偏移地址3.2傳送指令59累加器專用傳送指令例3.2-5:已知AL中有一個0~9范圍內的數,試用查表指令寫出能查找出該數平方值的程序分析:假設內存數據段有一張0~9的平方值表。平方值表的起始地址為21000H,則相應平方值表如圖:21000H21001H21002H21003H21004H21005H21006H21007H21008H21009H…0149162536496481…偏移量0123456789數字恰好等于該數平方值對表起始地址的偏移量設DS=2000HBX=21000H?DS16=1000H3.2傳送指令60累加器專用傳送指令例3.2-5:已知AL中有一個0~9范圍內的數,試用查表指令寫出能查找出該數平方值的程序21000H21001H21002H21003H21004H21005H21006H21007H21008H21009H…0149162536496481…MOVAX,2000H ;取平方表的段地址MOVDS,AXMOVBX,1000H ;取平方表的偏移地址MOVAL,06H ;AL中為待查找的數XLATDS16+BXDS16+BX+ALAL636MOVAH,00ADDBX,AXMOVAL,[BX]等價于3.2傳送指令61主要內容3.2傳送指令MOV指令棧指令交換指令累加器專用傳送指令地址傳送指令標志位傳送指令62地址傳送指令

LEA指令格式:LEAREG

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論