![微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件_第1頁](http://file4.renrendoc.com/view/d6a7f96d54fcca60183604792d6ea1e1/d6a7f96d54fcca60183604792d6ea1e11.gif)
![微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件_第2頁](http://file4.renrendoc.com/view/d6a7f96d54fcca60183604792d6ea1e1/d6a7f96d54fcca60183604792d6ea1e12.gif)
![微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件_第3頁](http://file4.renrendoc.com/view/d6a7f96d54fcca60183604792d6ea1e1/d6a7f96d54fcca60183604792d6ea1e13.gif)
![微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件_第4頁](http://file4.renrendoc.com/view/d6a7f96d54fcca60183604792d6ea1e1/d6a7f96d54fcca60183604792d6ea1e14.gif)
![微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件_第5頁](http://file4.renrendoc.com/view/d6a7f96d54fcca60183604792d6ea1e1/d6a7f96d54fcca60183604792d6ea1e15.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章8086尋址方式與指令系統(tǒng)第3章8086尋址方式與指令系統(tǒng)本章主要內(nèi)容概述1
8086尋址方式2
8086指令系統(tǒng)3本章主要內(nèi)容概述18086尋址方式280863.1概述指令是指揮計算機進行操作的命令。指令系統(tǒng)是指微處理器能執(zhí)行的各種指令的集合。程序是一系列按一定順序排列的指令。執(zhí)行程序的過程就是計算機的工作過程。微處理器的主要功能由它的指令系統(tǒng)來體現(xiàn)。不同的微處理器有不同的指令系統(tǒng),其中每一條指令對應著處理器的一種基本操作,這在設計微處理器時確定。
3.1概述指令是指揮計算機進行操作的命令。通常一條指令包括兩部分:操作碼:決定要完成的操作操作數(shù):指參加運算的數(shù)據(jù)或是該數(shù)所在的內(nèi)存單元的地址。指令的一般格式如下:操作碼[操作數(shù)1,操作數(shù)2,……,操作數(shù)n]沒有操作數(shù)的指令稱為無操作數(shù)指令。有兩個操作數(shù)的指令稱為雙操作數(shù)或二地址指令。操作碼和操作數(shù)地址都由二進制數(shù)碼表示,整條指令以二進制編碼的形式存放在存儲器中。通常一條指令包括兩部分:3.28086尋址方式尋址方式:指令中給出的求出操作數(shù)有效地址的方法。尋址操作:計算機按照指令給出的尋址方式求出操作數(shù)有效地址的過程。3.28086尋址方式尋址方式:8086的七種基本的數(shù)據(jù)尋址方式(1)立即尋址;(2)寄存器尋址;(3)直接尋址;(4)寄存器間接尋址;(5)寄存器相對尋址;(6)基址變址尋址;(7)相對基址變址尋址。存儲器尋址方式8086的七種基本的數(shù)據(jù)尋址方式(1)立即尋址;存儲器尋址方3.2.1立即尋址操作數(shù)直接出現(xiàn)在指令中,此時的操作數(shù)也叫立即數(shù)。立即數(shù)緊跟在操作碼后面,一起存放在代碼段中。例如:MOVAX,2010H在該指令格式中,AX是目標操作數(shù),2010H是源操作數(shù)。3.2.1立即尋址操作數(shù)直接出現(xiàn)在指令中,此時的操作數(shù)也叫立即尋址方式的指令執(zhí)行示意圖立即尋址方式的指令執(zhí)行示意圖立即尋址方式說明在所有的指令中,立即數(shù)只能作源操作數(shù),不能作目標操作數(shù)。立即數(shù)應與目標操作數(shù)的長度一致。立即數(shù)默認采用十進制形式,以十六進制形式出現(xiàn)的立即數(shù)應以字母H為后綴,以八進制形式出現(xiàn)的立即數(shù)應以字母Q為后綴。以十六進制形式出現(xiàn)的立即數(shù),若以字母開頭,則必須以數(shù)字0為前綴。立即數(shù)還可以用表示+、-、×、/表示的算術表達式,也可以用圓括號改變運算順序。立即數(shù)只能是整數(shù),不能是小數(shù)、變量或其它類型的數(shù)據(jù)。立即尋址方式說明在所有的指令中,立即數(shù)只能作源操作數(shù),不能作3.2.2寄存器尋址操作數(shù)在寄存器中,在指令中指定寄存器號。由于寄存器號短,因此,采用寄存器尋址方式的指令的機器碼長度短。操作數(shù)在寄存器中,指令執(zhí)行時,操作就在CPU的內(nèi)部進行,不需要通過訪問存儲器來取得操作數(shù),因而指令的執(zhí)行速度快。在編程中,如有可能,應盡量在指令中使用這種尋址方式。例如:MOVAX,2010H3.2.2寄存器尋址操作數(shù)在寄存器中,在指令中指定寄存器號寄存器尋址方式可用的寄存器對于16位操作數(shù),寄存器可以是:AX,BX,CX,DXSI,DI,SP,BPCS,DS,SS和ES對8位操作數(shù),寄存器可以是:AH,ALBH,BLCH,CLDH,DL寄存器尋址方式可用的寄存器對于16位操作數(shù),寄存器可以是:寄存器尋址方式指令執(zhí)行示意圖寄存器尋址方式指令執(zhí)行示意圖寄存器尋址方式說明在一條指令中,寄存器尋址方式既可用于源操作數(shù),也可用于目標操作數(shù),還可以兩者都用寄存器尋址方式。源操作數(shù)與目標操作數(shù)的長度應一致。例如,不能將寄存器AX的內(nèi)容傳送到寄存器BH中,也不能將寄存器BH的內(nèi)容傳送到寄存器AX中。兩個操作數(shù)不能同時為段寄存器。目標操作數(shù)不能是代碼段寄存器。寄存器尋址方式說明在一條指令中,寄存器尋址方式既可用于源操作3.2.3直接尋址操作數(shù)在存儲器中,指令中以具體數(shù)值的形式直接給出操作數(shù)所在存儲單元的有效地址EA。為了與立即數(shù)區(qū)別,該有效地址必須用[]括起。例如:MOVAX,[2010H]該指令的源操作數(shù)采用直接尋址方式。若(DS)=2000H,那么指令執(zhí)行后,(AX)=1225H。3.2.3直接尋址操作數(shù)在存儲器中,指令中以具體數(shù)值的形式直接尋址方式指令執(zhí)行示意圖直接尋址方式指令執(zhí)行示意圖采用直接尋址方式時,如果指令中沒有用前綴說明操作數(shù)存放在哪個段,則操作數(shù)默認存放在數(shù)據(jù)段。8086系統(tǒng)允許操作數(shù)存放在代碼段、堆棧段或附加段。此時,就需要在指令中指明段超越。例如:MOVES:[1225H],AX該指令的目標操作數(shù)采用直接尋址方式。操作數(shù)存放在由ES指示的附加段中。物理地址=ES×10H+1225H。采用直接尋址方式時,如果指令中沒有用前綴說明操作數(shù)存放在哪個在匯編語言指令中,可以用符號地址代替數(shù)值地址。例如:MOVAX,NUMA此時,NUMA是存放操作數(shù)的內(nèi)存單元的符號地址。上面這條指令還可以寫成如下的形式:MOVAX,[NUMA]如DATA1數(shù)據(jù)存放在附加段,則可以用如下的形式指定段跨越前綴:MOVAX,ES:NUMA或MOVAX,ES:[NUMA]在匯編語言指令中,可以用符號地址代替數(shù)值地址。3.2.4寄存器間接尋址操作數(shù)的有效地址EA存放在基址寄存器BX、BP或變址寄存器SI、DI中。為了區(qū)別于寄存器尋址方式,指令中指定的寄存器名要用[]括起來。指令中使用SI、DI、BX寄存器時,操作數(shù)默認存放在數(shù)據(jù)段中;使用BP寄存器時,操作數(shù)默認存放在堆棧段中,允許段超越。操作數(shù)的物理地址=(DS)×10H+(SI)/(DI)/(BX)或(SS)×10H+(BP)3.2.4寄存器間接尋址操作數(shù)的有效地址EA存放在基址寄存例如:MOVAX,[SI]該指令的源操作數(shù)采用寄存器間接尋址方式。若(DS)=2000H,(SI)=2010H,那么指令執(zhí)行后,(AX)=1225H。如操作數(shù)不存放在間址寄存器默認的段,則指定段超越的指令可采用如下形式。MOVAX,ES:[SI]
此時,操作數(shù)的物理地址=ES×10H+SI。例如:寄存器間接尋址方式指令執(zhí)行示意圖寄存器間接尋址方式指令執(zhí)行示意圖3.2.5寄存器相對尋址操作數(shù)的有效地址EA是指令中指定的基址或變址寄存器的值與位移量之和。指令中使用SI、DI、BX寄存器時,操作數(shù)默認存放在數(shù)據(jù)段中;使用BP寄存器時,操作數(shù)默認存放在堆棧段中,允許段超越。操作數(shù)的物理地址=(DS)×10H+(SI)/(DI)/(BX)+8位或16位位移量
或
=(SS)×10H+(BP)+8位或16位位移量3.2.5寄存器相對尋址操作數(shù)的有效地址EA是指令中指定的例如:MOVAX,8[BX]該指令的源操作數(shù)采用寄存器相對尋址方式。若(DS)=2000H,(BX)=2008H,那么指令執(zhí)行后,(AX)=1225H。例如:寄存器相對尋址方式的指令執(zhí)行示意圖寄存器相對尋址方式的指令執(zhí)行示意圖寄存器相對尋址說明偏移量是符號數(shù),8位偏移量的取值范圍為:00~0FFH(即+127D~-128D);16位偏移量的取值范圍為:0000~0FFFFH(即+32767D~-32768D)。8086匯編允許用下面三種形式表示相對尋址,它們是等效的。MOVAX,[BX]+8MOVAX,8[BX]MOVAX,[BX+8]寄存器相對尋址說明偏移量是符號數(shù),8位偏移量的取值范圍為:03.2.6基址變址尋址操作數(shù)的有效地址EA是指令中指定的基址寄存器的值與變址寄存器的值之和。指令中使用基址寄存器BX時,操作數(shù)默認存放在數(shù)據(jù)段中;使用基址寄存器BP時,操作數(shù)默認存放在堆棧段中,允許段超越。操作數(shù)的物理地址=(DS)×10H+(SI)/(DI)+(BX)或
=(SS)×10H+(SI)/(DI)+(BP)3.2.6基址變址尋址操作數(shù)的有效地址EA是指令中指定的基址例如:MOVAX,[BX][SI]該指令的源操作數(shù)采用基址變址尋址方式。若(DS)=2000H,(BX)=2008H,(SI)=8H,那么指令執(zhí)行后,(AX)=1225H。例如:基址變址尋址方式的指令執(zhí)行示意圖基址變址尋址方式的指令執(zhí)行示意圖3.2.7相對基址變址尋址操作數(shù)的有效地址EA是指令中指定的基址寄存器的值與變址寄存器的值以及8位或16位位移量之和。指令中使用基址寄存器BX時,操作數(shù)默認存放在數(shù)據(jù)段中;使用基址寄存器BP時,操作數(shù)默認存放在堆棧段中,允許段超越。操作數(shù)的物理地址=(DS)×10H+(SI)/(DI)+(BX)+8位或16位位移量或
=(SS)×10H+(SI)/(DI)+(BP)+8位或16位位移量3.2.7相對基址變址尋址操作數(shù)的有效地址EA是指令中指定例如:MOVAX,3[BX][SI]該指令的源操作數(shù)采用寄存器相對尋址方式。若(DS)=2000H,(BX)=2008H,(SI)=5H,那么指令執(zhí)行后,(AX)=1225H。例如:相對基址變址尋址方式的指令執(zhí)行示意圖相對基址變址尋址方式的指令執(zhí)行示意圖3.38086指令系統(tǒng)8086指令系統(tǒng)包括六大類指令:數(shù)據(jù)傳送指令算術運算指令邏輯運算和移位指令串操作指令控制轉移指令處理器控制指令3.38086指令系統(tǒng)8086指令系統(tǒng)包括六大類指令:8086匯編指令中的操作數(shù)可以有零個、一個或兩個,通常稱為零地址、一地址或二地址指令。二地址指令中的兩個操作數(shù)分別稱為源操作數(shù)和目標操作數(shù)。8086匯編指令中的操作數(shù)可以有零個、一個或兩個,通常稱為零3.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是將數(shù)據(jù)或地址傳送到寄存器、存儲單元或I/O端口中。分為5類:通用數(shù)據(jù)傳送指令;累加器專用傳送指令;地址傳送指令;標志傳送指令;數(shù)據(jù)類型轉換指令。3.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是將數(shù)據(jù)或地址傳送到寄存器數(shù)據(jù)傳送指令的共同特點除了POPF和SAHF指令外,其他的數(shù)據(jù)傳送指令的執(zhí)行結果都不影響標志位。指令中如果列出兩個操作數(shù),則指令的執(zhí)行過程是:目標操作數(shù)←源操作數(shù)。指令中如果僅列出一個操作數(shù),則另一個操作數(shù)為隱含操作數(shù)。數(shù)據(jù)傳送指令的共同特點除了POPF和SAHF指令外,其他的數(shù)1.通用數(shù)據(jù)傳送指令1)傳送指令格式:MOV目標操作數(shù),源操作數(shù)
功能:將源操作數(shù)的內(nèi)容(一個字或一個字節(jié))傳送到目標操作數(shù)指定的寄存器或內(nèi)存單元,源操作數(shù)內(nèi)容不變。例如:MOVAL,5;字節(jié)傳送,立即數(shù)送通用寄存器MOVAX,BX;字傳送,通用寄存器送通用寄存器MOVDS,AX ;字傳送,通用寄存器送段寄存器1.通用數(shù)據(jù)傳送指令1)傳送指令MOV指令的使用說明源操作數(shù)可以是立即數(shù)、寄存器或內(nèi)存操作數(shù)。目標操作數(shù)可以是寄存器或內(nèi)存操作數(shù)。立即數(shù)和CS寄存器只能作為源操作數(shù),不允許作為目標操作數(shù)。IP和FR都不可作為源操作數(shù)或是目標操作數(shù)。立即數(shù)不允許直接傳送至DS、ES或SS寄存器。源操作數(shù)和目標操作數(shù)不允許同時是內(nèi)存操作數(shù),也不允許同時是段寄存器。源操作數(shù)和目標操作數(shù)的類型必須相同,即同為字節(jié)類型或字類型。MOV指令的使用說明源操作數(shù)可以是立即數(shù)、寄存器或內(nèi)存操作數(shù)1.通用數(shù)據(jù)傳送指令2)數(shù)據(jù)交換指令格式:XCHG 目標操作數(shù),源操作數(shù)
功能:源操作數(shù)的內(nèi)容(一個字或字節(jié))與目標操作數(shù)的內(nèi)容(一個字或字節(jié))互換。例如:XCHGBL,AH
;字節(jié)交換,寄存器與寄存器的內(nèi)容交換XCHGAX,[BX][SI]
;字交換,寄存器與內(nèi)存單元的內(nèi)容交換1.通用數(shù)據(jù)傳送指令2)數(shù)據(jù)交換指令XCHG指令的使用說明源操作數(shù)和目標操作數(shù)都可以是寄存器或內(nèi)存操作數(shù)。源操作數(shù)和目標操作數(shù)不可同時是內(nèi)存操作數(shù)。源操作數(shù)和目標操作數(shù)不可以同時是寄存器AX(累加器)。段寄存器、寄存器IP或立即數(shù)不可以作為源操作數(shù)或目標操作數(shù)。例如:XCHGAX,2011H;╳源操作數(shù)不能是立即數(shù)XCHGCS,5[SI];╳CS不能作為操作數(shù)XCHGAX,AX;╳源操作數(shù)和目標操作數(shù)不可同是AXXCHG指令的使用說明源操作數(shù)和目標操作數(shù)都可以是寄存器或內(nèi)【例3-1】若兩個字數(shù)據(jù)分別存儲在內(nèi)存單元NUM1和NUM2中,編寫匯編程序段將這兩個內(nèi)存單元的內(nèi)容互換。匯編程序段如下:MOVAX,NUM1XCHGAX,NUM2MOVNUM1,AX【例3-1】若兩個字數(shù)據(jù)分別存儲在內(nèi)存單元NUM1和NUM2堆棧堆棧是一塊按照“后進先出”原則工作的內(nèi)存區(qū)域。把數(shù)據(jù)從棧頂存入堆棧中的操作稱為入棧(或壓入);把數(shù)據(jù)通過棧頂從堆棧中取出的操作稱為出棧(或彈出)。堆棧常被用于數(shù)據(jù)的暫存、交換、子程序的參數(shù)傳遞等場合。在調(diào)用子程序或轉入中斷服務程序時,堆棧是默認的被用于保存返回地址的內(nèi)存區(qū)域。為了實現(xiàn)子程序或中斷嵌套,也必須使用堆棧技術。堆棧堆棧是一塊按照“后進先出”原則工作的內(nèi)存區(qū)域。在8086系統(tǒng)中,堆棧所在的段就是堆棧段,它可以占用的最大空間是64KB。堆棧段的段地址由SS寄存器指示。堆棧指針寄存器SP始終指示棧頂?shù)钠频刂凡㈦S著入棧和出棧操作而自動變化。當進行壓入操作后堆棧指針達到定義值,表明堆棧滿;當執(zhí)行彈出操作后堆棧指針回到初值,表明堆???。當棧滿時,再壓入數(shù)據(jù),稱為“堆棧溢出”。在8086系統(tǒng)中,堆棧所在的段就是堆棧段,它可以占用的最大空1.通用數(shù)據(jù)傳送指令3)堆棧操作指令8086指令系統(tǒng)中:堆棧操作指令中操作數(shù)的類型只能是字,不能是字節(jié)。立即數(shù)不能作為操作數(shù)。1.通用數(shù)據(jù)傳送指令3)堆棧操作指令進棧指令格式:PUSH源操作數(shù)功能:源操作數(shù)入棧。指令的執(zhí)行如下操作:①(SP)←(SP)-2②(SS:SP)←源操作數(shù)說明:源操作數(shù)可以是寄存器或是內(nèi)存操作數(shù)。進棧指令格式:PUSH源操作數(shù)出棧指令格式:POP目標操作數(shù)功能:數(shù)據(jù)出棧,存入目標操作數(shù)。指令的執(zhí)行如下操作:①
目標操作數(shù)←(SS:SP)②(SP)←(SP)+2說明:目標操作數(shù)可以是段寄存器、16位寄存器或內(nèi)存操作數(shù)。當目標操作數(shù)是段寄存器時,不能是CS寄存器。出棧指令格式:POP目標操作數(shù)【例3-2】設(SS)=2011H,(SP)=0020H,依次執(zhí)行下列匯編指令后,分析堆棧中的數(shù)據(jù)和寄存器AX、BX、SP的變化情況。MOVAX,0103HMOVBX,1228HPUSHAXPUSHBXPOPBX【例3-2】設(SS)=2011H,(SP)=0020H,依微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件微型計算機-第3章-8086尋址方式與指令系統(tǒng)課件2.累加器專用傳送指令(1)換碼指令格式一:XLAT格式二:XLAT表格首地址
功能:將內(nèi)存表格中某一單元的值傳送至寄存器AL,實現(xiàn)一種編碼到另一種編碼的轉換。例如,把字符的掃描碼轉換成ASCII碼。指令的執(zhí)行如下操作:把數(shù)據(jù)段中偏移地址為BX+AL的內(nèi)存單元的內(nèi)容送到AL中,即:(AL)←(BX+AL)。2.累加器專用傳送指令(1)換碼指令XLAT指令使用說明源操作數(shù)、目標操作數(shù)均隱含。該指令隱含說明:寄存器BX保存內(nèi)存表格的首地址;寄存器AL保存表格中某單元在此表格中的偏移量。因此,在使用該指令之前,必須先初始化BX和AL這兩個寄存器。該指令能訪問的內(nèi)存表格中的數(shù)據(jù)只能是字節(jié)類型的。該指令能訪問的內(nèi)存表格的最大容量是256字節(jié)。格式二中的表格首地址部分,只是為了提高程序的可讀性而設置的。指令執(zhí)行時,使用BX的值作為表格首地址。XLAT指令使用說明源操作數(shù)、目標操作數(shù)均隱含。XLAT指令用法舉例若(DS)=2000H,(BX)=0020H,(AL)=9H,則執(zhí)行指令XLAT后,(AL)=39H。XLAT指令用法舉例若(DS)=2000H,(BX)=002(2)輸入/輸出指令(I/O指令)(1)輸入指令格式一:INAL,端口地址格式二:INAX,端口地址格式三:INAL,DX格式四:INAX,DX功能:從指令中指定的I/O端口讀入一字節(jié)數(shù)據(jù)到AL或一個字數(shù)據(jù)到AX。(2)輸入/輸出指令(I/O指令)(1)輸入指令(2)輸出指令格式一:OUT端口地址,AL格式二:OUT端口地址,AX格式三:OUTDX,AL格式四:OUTDX,AX功能:將AL或AX的內(nèi)容輸出到一個8位I/O端口或16位I/O端口。(2)輸出指令格式一:OUT端口地址,ALIN/OUT指令的使用說明采用格式一和格式二時,端口地址的取值范圍是:0~FFH,可以尋址256個I/O端口。當端口地址值超過255D時,只能采用格式三或格式四,把端口地址保存到寄存器DX中,此時,端口地址的取值范圍是:0~FFFFH,可以尋址65536個I/O端口。當端口是8位時,目標操作數(shù)選用AL寄存器;當端口是16位時,目標操作數(shù)選AX寄存器。IN/OUT指令的使用說明采用格式一和格式二時,端口地址的取IN/OUT指令的使用舉例MOVDX,60H ;端口地址送DX寄存器中INAL,DX ;從60H端口寫入一個8位數(shù)OUT90H,AX ;將16位數(shù)輸出到90H端口IN/OUT指令的使用舉例MOVDX,60H ;端口地3.地址傳送指令在匯編程序中,地址是一種特殊操作數(shù),區(qū)別于一般數(shù)據(jù)操作數(shù),它無符號,長度為16位。在8086系統(tǒng)中,有專門的指令進行地址傳送。3.地址傳送指令在匯編程序中,地址是一種特殊操作數(shù),區(qū)別于一(1)取有效地址指令LEA格式:LEAr16,mem功能:取內(nèi)存單元mem的有效地址,送到16位寄存器r16中,即:r16←EA(mem)。例如,設DS=2100H,BX=100H,SI=10H,(DS:110H)=1234H,則指令:LEABX,[BX+SI]執(zhí)行后,(BX)=(BX)+(SI)=110H。(1)取有效地址指令LEA格式:LEAr16,mem(2)地址指針裝入DS指令LDS格式:LDSr16,m32功能:把內(nèi)存中的32位源操作數(shù)中的低16位送到指定寄存器r16中,高16位送到段寄存器DS中。即:r16←m32低16位;DS←m32高16位。(3)地址指針裝入ES指令LES把上述指令中的DS換成ES,即成為LES指令。(2)地址指針裝入DS指令LDS4.標志傳送指令標志寄存器用于記載指令執(zhí)行引起的狀態(tài)變化及一些特殊控制位,以此作為控制程序執(zhí)行的依據(jù)。標志寄存器是特殊寄存器,不能像一般數(shù)據(jù)寄存器那樣隨意操作,以免其中的值發(fā)生變化。4.標志傳送指令標志寄存器用于記載指令執(zhí)行引起的狀態(tài)變化及一(1)取標志指令LAHF格式:LAHF該指令中的源操作數(shù)隱含為標志寄存器低8位,目標操作數(shù)隱含為AH。功能:把16位的標志寄存器低8位送寄存器AH。(2)置標志指令SAHF格式:SAHF該指令中的源操作數(shù)隱含為AH,目標操作數(shù)隱含為標志寄存器。功能:把寄存器AH中內(nèi)容送至16位的標志寄存器低8位,此操作是LAHF的逆操作。(1)取標志指令LAHF【例3-3】
編寫匯編程序段,把標志寄存器的CF位求反,其他位不變。LAHF ;取標志寄存器的低8位XORAH,01H ;最低位求反,其他位不變SAHF ;送入標志寄存器的低8位【例3-3】編寫匯編程序段,把標志寄存器的CF位求反,其(3)標志入棧指令PUSHF格式:PUSHF該指令中的源操作數(shù)隱含為標志寄存器,目標操作數(shù)隱含為堆棧區(qū)。功能:標志寄存器入棧。①SP←SP–2;
②(SP+1,SP)←FLAG。(3)標志入棧指令PUSHF(4)標志彈出指令POPF格式:POPF該指令中的源操作數(shù)隱含為堆棧區(qū),目標操作數(shù)隱含為標志寄存器。功能:數(shù)據(jù)出棧到標志寄存器。①FLAG←(SP+1,SP);
②SP←SP+2。此操作是LAHF的逆操作。SAHF和POPF指令直接改變標志寄存器的值。利用這一特性,可以非常方便地改變有關的標志位。(4)標志彈出指令POPF【例3-4】
編寫匯編程序段,把標志寄存器TF位清零,其他標志位不變。PUSHF ;標志寄存器入棧POPAX ;取標志寄存器內(nèi)容ANDAX,0FEFFH ;TF清零,其他位不變PUSHAX ;新值入棧POPF ;送入標志寄存器【例3-4】編寫匯編程序段,把標志寄存器TF位清零,其他5.數(shù)據(jù)類型轉換指令(1)字節(jié)轉換為字指令格式:CBW功能:把寄存器AL中數(shù)據(jù)的符號位擴到AH寄存器中,使字節(jié)轉換為字。指令的執(zhí)行如下操作:當AL<80H時,AH←00H;當AL≥80H時,AH←FFH。說明:該指令中的源操作數(shù)隱含為寄存器AL,目標操作數(shù)隱含為寄存器AX。一個用補碼表示的數(shù)經(jīng)CBW指令進行符號位擴展后,數(shù)值大小不變。5.數(shù)據(jù)類型轉換指令(1)字節(jié)轉換為字指令(2)字轉換為雙字指令格式:CWD功能:把寄存器AX中數(shù)據(jù)的符號位擴到DX寄存器中,使字轉換為雙字。指令的執(zhí)行如下操作:當AL<8000H時,DX←0000H;當AL≥8000H時,DX←FFFFH。說明:該指令中的源操作數(shù)隱含為寄存器AX,目標操作數(shù)隱含為寄存器DX,AX。一個用補碼表示的數(shù)經(jīng)CWD指令進行符號位擴展后,數(shù)值大小不變。(2)字轉換為雙字指令例如:(1)MOVAL,75H
CBW ;執(zhí)行結果為:AX=0075H(2)MOVAX,0A085H
CWD ;執(zhí)行結果為:DX=0FFFFH,AX=0A085H例如:3.3.2算術運算指令算術運算指令用來執(zhí)行算術運算,完成的操作有5種:加法、減法、乘法、除法和十進制調(diào)整。算術運算指令中的操作數(shù)有:一個或兩個。雙操作數(shù)指令中,除了源操作數(shù)是立即數(shù)這種情況外,其余情況下,必須有一個操作數(shù)在寄存器中。單操作數(shù)指令中的操作數(shù)不允許是立即數(shù)。所有的算術運算指令都遵守這個規(guī)則。3.3.2算術運算指令算術運算指令用來執(zhí)行算術運算,完成的操1.加法指令(1)不帶進位的加法指令格式:ADDdest,src功能:(dest)←(dest)+(src) 說明:源操作數(shù)可以是立即數(shù)、通用寄存器或存儲器操作數(shù),目標操作數(shù)只能是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF和OF。1.加法指令(1)不帶進位的加法指令例如:ADDCX,DIADD[BP],CLADDCL,TEMPADDBYTEPTR[DI],3
例如:(2)帶進位的加法指令格式:ADCdest,src功能:(dest)←(dest)+(src)+CF,用于多字節(jié)或多字加法運算。源操作數(shù)可以是立即數(shù)、通用寄存器或存儲器操作數(shù),目標操作數(shù)只能是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF和OF。例如:ADCCX,DI ;CX←CX+DI+CF(2)帶進位的加法指令【例3-5】
編寫匯編程序段,計算11112222H+33334444H。MOVAX,2222HADDAX,4444HMOVBX,1111HADCBX,3333H【例3-5】編寫匯編程序段,計算11112222H+33(3)加1指令格式:INCdest功能:(dest)←(dest)+1 說明:目標操作數(shù)可以是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:PF、AF、ZF、SF和OF。(3)加1指令2.減法指令(1)不帶進位減法指令格式:SUBdest,src功能:(dest)←(dest)-(src)說明:源操作數(shù)可以是立即數(shù)、通用寄存器或存儲器操作數(shù),目標操作數(shù)只能是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF和OF。2.減法指令(1)不帶進位減法指令例如:SUBAX,0CCCCH ;AX←AX-0CCCCHSUB[DI],CH ;由DI尋址的數(shù)據(jù)段字節(jié)單元;的值減去CH后,回存結果例如:(2)帶進位減法指令格式:SBBdest,src功能:(dest)←(dest)-(src)-CF,常用于多字節(jié)或多字減法運算。說明:源操作數(shù)可以是立即數(shù)、通用寄存器或存儲器操作數(shù),目標操作數(shù)只能是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF和OF。(2)帶進位減法指令例如:SUBAX,DI ;(AX)←(AX)-(DI)SBBBX,SI ;(BX)←(BX)-(SI)-CF例如:(3)減1指令格式:DECdest功能:(dest)←(dest)-1 目標操作數(shù)可以是通用寄存器或存儲器操作數(shù)。指令執(zhí)行后,影響標志:PF、AF、ZF、SF和OF。例如:MOVAL,0DECAL ;AL=0FFH,OF=0,SF=1,ZF=0,AF=1,PF=1DECNUM ;由定義NUM的方法來確定這是字節(jié)減1還是字減1(3)減1指令CPU運算時統(tǒng)一使用補碼運算規(guī)則。加、減運算指令中,不區(qū)分符號數(shù)與無符號數(shù),即符號數(shù)與無符號數(shù)使用相同的加、減指令。實際應用中,操作數(shù)是符號數(shù)還是無符號數(shù),由編程人員看問題的視角來定。相同的編碼,不同的視角,值不同,對運算結果的溢出判斷標準也不同。將操作數(shù)看作符號數(shù)時,若OF=1,則結果溢出;若OF=0,則結果不溢出。將操作數(shù)看作無符號數(shù)時,若CF=1,則結果溢出;若CF=0,則結果不溢出。CPU運算時統(tǒng)一使用補碼運算規(guī)則。加、減運算指令中,不區(qū)分符(4)比較指令格式:CMPdest,src功能:(dest)-(src)源操作數(shù)可以是立即數(shù)、通用寄存器或存儲器操作數(shù),目標操作數(shù)只能是通用寄存器或存儲器操作數(shù)。指令執(zhí)行后,影響:CF、PF、AF、ZF、SF和OF。CMP指令通過減操作(dest)-(src),對標志寄存器的標志產(chǎn)生影響,不保留結果。后續(xù)指令可以通過標志值,來判別目標操作數(shù)與源操作數(shù)之間的大小關系。(4)比較指令例如:CMPAL,0 ;(AL)-0由于無符號數(shù)與符號數(shù)表示規(guī)則不同(符號數(shù)的最高位為符號位,無符號數(shù)各位均為數(shù)字位),使得無符號數(shù)與符號數(shù)大小判定依據(jù)不同。例如:無符號數(shù)相減,不可能有溢出,與大小相關的標志位是:ZF與CF。符號數(shù)相減,不僅考慮正、負,并且可能存在溢出,與大小相關的標志位有:SF、ZF和OF。符號數(shù)A減去符號數(shù)B時,不發(fā)生溢出(OF=0)時,如果SF=0,則A>B;如果SF=1,則A<B。發(fā)生溢出(OF=1)時,如果SF=1,則A>B;如果SF=0,則A<B。無符號數(shù)相減,不可能有溢出,與大小相關的標志位是:ZF與CF(5)求補指令格式:NEGdest 功能:(dest)←0-(dest) 該指令執(zhí)行后,把操作數(shù)按位求反,末位加1后送回操作數(shù)。目標操作數(shù)可以是通用寄存器或存儲器操作數(shù)。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF和OF。若操作數(shù)是-128D或-32768D,則OF=1。若操作數(shù)是非0值,則CF=1;若操作數(shù)是0,則CF=0。(5)求補指令例如:MOVDL,01111000B ;DL=120DNEGDL;DL=0-0111
1000=1000
1000B=-120D例如:3.乘法指令8086/8088可完成字節(jié)與字節(jié)乘、字與字乘。指令中給出乘數(shù),被乘數(shù)隱含。乘數(shù)可以是寄存器或內(nèi)存操作數(shù),不能為立即數(shù)。字節(jié)乘時,乘積的高8位存于寄存器AH中,低8位存于寄存器AL中。字乘時,被乘數(shù)隱含為寄存器AX,乘積的高16位存于寄存器DX中,低16位存于寄存器AX中。3.乘法指令8086/8088可完成字節(jié)與字節(jié)乘、字與字乘。(1)無符號數(shù)乘法指令格式:MULsrc功能:當src為字節(jié)時,AX←ALsrc;當src為字時,(DX,AX)←AXsrc說明:乘法指令僅影響標志位OF,CF,對其他標志位無意義。字節(jié)乘時,如果AH=0,則OF=CF=0;如果AH0,OF=CF=1。字乘時,如果DX=0,則OF=CF=0;DX0,OF=CF=1。(1)無符號數(shù)乘法指令例如:MULWORDPTR[SI];無符號乘法,AX乘以由SI尋址的數(shù)據(jù)段存儲單元的字內(nèi)容,積在DX-AX中例如:(2)符號乘法指令格式:IMULsrc 功能:當src為字節(jié)時,AX←ALsrc;當src為字時,(DX,AX)←AXsrc說明:乘法指令僅影響標志位OF,CF,對其他標志位無意義。符號數(shù)乘時,當積的高8位(字節(jié)乘)或積的高16位(字乘)是低字節(jié)(字節(jié)乘)或低字(字乘)的符號擴展時,OF=CF=0;否則,OF=CF=1。(2)符號乘法指令例如:IMULCL ;符號乘法,AL乘以CL,積在AX中例如:【例3-6】編寫匯編程序段,計算20H0FFH。解(1)將兩數(shù)看成無符號數(shù),即32D255D=8160D。MOVAL,20H ;AL=20H=32DMOVBL,0FFH ;BL=0FFH=255DMULBL;AX=1FE0H=8160D,OF=CF=1【例3-6】編寫匯編程序段,計算20H0FFH。(2)將兩數(shù)看成符號數(shù),即32D(-1D)=-32DMOVAL,20H;AL=20H=32DMOVBL,0FFH;BL=0FFH=-1DIMULBL ;AX=FFE0H=-32D,OF=0,CF=0(2)將兩數(shù)看成符號數(shù),即32D(-1D)=-32D4.除法指令8086/8088可完成除數(shù)為字節(jié)和除數(shù)為字的兩種除法。指令中給出除數(shù),被除數(shù)隱含。除數(shù)可以是寄存器或內(nèi)存操作數(shù),不能為立即數(shù)。除數(shù)為字節(jié)時,被除數(shù)必須為16位,隱含為寄存器AX,商存于寄存器AL中,余數(shù)存于寄存器AH中;除數(shù)為字時,被除數(shù)必須為32位,隱含為寄存器DX,AX,商存于寄存器AX中,余數(shù)存于寄存器DX中。4.除法指令8086/8088可完成除數(shù)為字節(jié)和除數(shù)為字的兩除法指令說明所有標志位在除法運算無溢出時沒有意義。除法“溢出”,是指除數(shù)為字節(jié)時,商大于0FFH或除數(shù)為字時,商大于0FFFFH。當發(fā)生除法溢出時,OF=1,并產(chǎn)生4型中斷(溢出中斷)。除法指令說明所有標志位在除法運算無溢出時沒有意義。(1)無符號除法指令格式:DIVsrc功能:當src為字節(jié)時,AL←AX(src)的商,AH←AX(src)的余數(shù);當src為字時,AX←DXAX(src)的商,DX←DXAX(src)的余數(shù)。說明:src可以為寄存器或內(nèi)存操作數(shù)。例如:DIVBYTEPTR[BP];AL←AX(SS:BP)的商,AH←AX(SS:BP)的余數(shù)(1)無符號除法指令(2)符號除法指令格式:IDIVsrc功能:當src為字節(jié)時,AL←AX(src)的商,AH←AX(src)的余數(shù);當src為字時,AX←DXAX(src)的商,DX←DXAX(src)的余數(shù)。
src可以為寄存器或內(nèi)存操作數(shù)。符號數(shù)除法中,商的符號遵循除法法則,余數(shù)的符號與被除數(shù)一致。例如:IDIVBL;AL←AX(BL)的有符號商,AH←AX(BL)的余數(shù)(2)符號除法指令【例3-7】
編寫匯編程序段,計算:(V-(X*Y+Z-100))/X。已知:X、Y、Z、V均為16位符號數(shù),已分別裝入X、Y、Z、V單元中,要求將上式計算結果的商存入AX,余數(shù)存入DX?!纠?-7】編寫匯編程序段,計算:(V-(X*MOVAX,X ;取被乘數(shù)XIMULY ;X*Y,結果在DX、AX中MOVCX,AX ;將乘積存在BX、CX中MOVBX,DXMOVAX,Z ;取被加數(shù)ZCWD;將符號擴展后的Z加到BX、CX中的乘積上ADDCX,AXMOVAX,X ;取被乘數(shù)XADCBX,DXSUBCX,100SBBBX,0 ;從BX、CX中減去100MOVAX,VCWDSUBAX,CX;從符號擴展后的V中減去(BX、CX)SBBDX,BX;并除以X,商在AX中,余數(shù)在DX中IDIVXADCBX,DX5.十進制調(diào)整指令(1)壓縮BCD碼的加法調(diào)整指令格式:DAA功能:①若AL的低4位>9或AF=1,則進行(AL)←(AL)+06H修正,同時AF置1。②若AL的高4位>9或CF=1,則進行(AL)←(AL)+60H修正,同時CF置1。說明:目標操作數(shù)隱含為寄存器AL。DAA指令緊跟在加法指令之后用。指令執(zhí)行后,影響CF、PF、AF、ZF、SF,對OF無意義。5.十進制調(diào)整指令(1)壓縮BCD碼的加法調(diào)整指令【例3-8】
編寫匯編程序段,用壓縮BCD碼編碼并計算12D+28D。MOVAL,12HADDAL,28H ;AL=3AH,AF=1,CF=0DAA ;AL=40H【例3-8】編寫匯編程序段,用壓縮BCD碼編碼并計算12(2)壓縮BCD數(shù)減法調(diào)整指令格式:DAS功能:①若AL的低4位>9或AF=1,則進行(AL)←(AL)-06H修正,同時AF置1。②若AL的高4位>9或CF=1,則進行(AL)←(AL)-60H修正,同時CF置1。說明:目標操作數(shù)隱含為寄存器AL。DAS指令緊跟在減法指令之后用。該指令執(zhí)行后,影響標志:CF、PF、AF、ZF、SF,對OF無意義。(2)壓縮BCD數(shù)減法調(diào)整指令【例3-9】
編寫匯編程序段,用壓縮BCD碼編碼并計算37D-19D。MOVAL,37HSUBAL,19H ;AL=1EH,AF=1,CF=0DAS ;AL=18H,AF=1【例3-9】編寫匯編程序段,用壓縮BCD碼編碼并計算37(3)非壓縮的BCD碼的加法調(diào)整指令(ASCII碼的加法調(diào)整指令)非壓縮的BCD碼用8個二進制位表示1位十進制數(shù),通常只用低4位,高4位置0。數(shù)字0~9的ASCII碼為30H~39H,其低4位的編碼與BCD編碼一致,所以又把非壓縮的BCD碼調(diào)整稱為ASCII碼調(diào)整。格式:AAA(3)非壓縮的BCD碼的加法調(diào)整指令(ASCII碼的加法調(diào)整AAA指令的功能①若AL中低4位<9且AF=0,則跳過②;②若AL中的低4位>9或AF=1,則進行(AL)←(AL)+06H修正,同時,(AH)←(AH)+1,AF置1。③清除AL寄存器的高4位。④AF值送CF。AAA指令的功能①若AL中低4位<9且AF=0,則跳過②;AAA指令的使用說明目標操作數(shù)隱含為寄存器AH和AL。AAA指令緊跟在加法指令之后用。該指令執(zhí)行后,影響標志:CF、AF,對PF、OF、ZF和SF的影響不確定。AAA指令的使用說明目標操作數(shù)隱含為寄存器AH和AL。【例3-10】
編寫匯編程序段,用非壓縮BCD碼編碼并計算7+9。MOVAL,'7' ;AL=37HADDAL,'9' ;AL=70H,AF=1,CF=0AAA;AH=01H,AL=06H,CF=AF=1【例3-10】編寫匯編程序段,用非壓縮BCD碼編碼并計算(4)非壓縮的BCD碼的減法調(diào)整指令(ASCII碼的減法調(diào)整指令)格式:AAS功能:①如果AL中低4位小于9且AF=0,由跳過②;②如果AL中低4位大于9或AF=1(即低4位向高4位有借位),減6調(diào)整,且AF置1;③清除AL寄存器的高4位;④AF值送CF。(4)非壓縮的BCD碼的減法調(diào)整指令(ASCII碼的減法調(diào)整AAS指令的使用說明目標操作數(shù)隱含為寄存器AH和AL。AAS指令緊跟在減法指令之后用。該指令執(zhí)行后,影響標志:CF、AF,對PF、OF、ZF和SF的影響不確定。AAS指令的使用說明目標操作數(shù)隱含為寄存器AH和AL?!纠?-11】
編寫匯編程序段,用非壓縮BCD碼編碼并計算17-9。MOVAL,7H ;AL=07HMOVAH,1H ;AH=1HSUBAL,9H ;AL=0FEH,AF=1,CF=1AAS ;AL=8H,CF=AF=1,AH=0【例3-11】編寫匯編程序段,用非壓縮BCD碼編碼并計算(5)非壓縮的BCD碼的乘法調(diào)整指令(ASCII碼的乘法調(diào)整指令)格式:AAM功能:把AL寄存器的內(nèi)容除以10,商放在AH寄存器中,余數(shù)保存在AL寄存器中,用于MUL之后,把AL中的乘積調(diào)整成非壓縮的BCD碼,結果存于寄存器AX中。說明:目標操作數(shù)隱含為寄存器AH和AL。AAM指令緊跟在MUL指令之后用。該指令執(zhí)行后,影響標志:PF、ZF和SF,對CF、AF和OF的影響不確定。(5)非壓縮的BCD碼的乘法調(diào)整指令(ASCII碼的乘法調(diào)整【例3-12】
編寫匯編程序,用非壓縮BCD碼編碼并計算93。MOVAL,9H ;AL=00001001BMOVBL,3H ;BL=00000011BMULBL;AH=0,AL=00011011B=27DAAM ;AH=02H,AL=07H(因為2710=27)【例3-12】編寫匯編程序,用非壓縮BCD碼編碼并計算9(6)非壓縮的BCD碼的除法調(diào)整指令(ASCII碼的除法調(diào)整指令)格式:AAD功能:將AH寄存器的內(nèi)容乘以10后加上AL的內(nèi)容,結果回送AL,同時將AH清0。(6)非壓縮的BCD碼的除法調(diào)整指令(ASCII碼的除法調(diào)整AAD指令使用說明被除數(shù)是2位十進制數(shù),存于寄存器AX中,AH中為十位上的數(shù),AL中為個位上的數(shù),除數(shù)是1位十進制數(shù)。該指令用在DIV之前對被除數(shù)進行調(diào)整,然后,用DIV指令做除法,所得之商還要用AAM指令進行調(diào)整后,才可以得到正確的非壓縮BCD結果。該指令執(zhí)行后,影響標志:PF、ZF和SF,對CF、AF和OF的影響不確定。AAD指令使用說明被除數(shù)是2位十進制數(shù),存于寄存器AX中,A【例3-13】
編寫匯編程序段,用非壓縮BCD碼編碼并計算732。MOVAX,0703HMOVBL,02HAAD ;(AL)=49H,(AH)=0DIVBL ;(AL)=24H(商),(AH)=01H(余數(shù))AAM ;(AL)=03H,(AH)=06H【例3-13】編寫匯編程序段,用非壓縮BCD碼編碼并計算3.3.3位運算指令位運算指令分為:邏輯運算指令移位指令循環(huán)移位指令3.3.3位運算指令位運算指令分為:1.邏輯運算指令邏輯非(NOT)邏輯與(AND)邏輯測試(TEST)邏輯或(OR)邏輯異或(XOR)指令這些邏輯運算指令的操作數(shù)可以是8位、16位,運算按位進行。對操作數(shù)的規(guī)定與MOV指令相同。1.邏輯運算指令邏輯非(NOT)(1)邏輯非指令格式:NOTdest 功能:(dest)←(dest)說明:不影響標志位。(1)邏輯非指令(2)邏輯與指令格式:ANDdest,src功能:(dest)←(dest)(src) 說明:對標志位的影響是:CF、OF清零;影響SF、ZF、PF;AF的值不定。(2)邏輯與指令(3)邏輯測試指令格式:TESTdest,src 功能:(dest)(src) 說明:執(zhí)行相與操作,以便影響標志位,但不保留結果。對標志位的影響是:CF、OF清零;影響SF、ZF、PF;AF的值不定。(3)邏輯測試指令(4)邏輯或指令格式:ORdest,src 功能:(dest)←(dest)(src) 說明:對標志位的影響是:CF、OF清零;影響SF、ZF、PF;AF的值不定。(4)邏輯或指令(5)邏輯異或指令格式:XORdest,src功能:(dest)←(dest)⊕(src) 說明:對標志位的影響是:CF、OF清零;影響SF、ZF、PF;AF的值不定。(5)邏輯異或指令例如:ANDAL,BL ;AL←ALBLXORAX,[DI]ORBX,0FF02H ;(BX)←(BX)FF02HNOTBYTEPTR[BX] ;字節(jié)內(nèi)容求反TESTAH,4;AH4,AH不變,只改變標志例如:【例3-14】
編寫匯編程序段,把數(shù)字8,變成字符“8”。MOVAL,8HORAL,30H ;AL=38H='8'【例3-15】
編寫匯編程序段,從端口80H讀取一字節(jié),將其D1位求反后,從80H送出。INAL,80HXORAL,00000010BOUT80H,AL【例3-14】編寫匯編程序段,把數(shù)字8,變成字符“8”?!纠?-16】
編寫匯編程序段,將寄存器AX清零。XORAX,AX還有哪些可以將AX清零的指令?比較之?!纠?-16】編寫匯編程序段,將寄存器AX清零。2.移位指令移位指令可以對寄存器或存儲單元的內(nèi)容按字節(jié)或字進行操作。2.移位指令移位指令可以對寄存器或存儲單元的內(nèi)容按字節(jié)或字進(1)邏輯左移指令格式:SHLdest,CNT 功能:目標操作數(shù)左移CNT次,最低位補0,最高位移至標志位CF中。說明:CNT代表移動次數(shù)。當CNT>1時,必須由寄存器CL說明。CF、ZF、SF、PF的值由運算結果定。CNT=1時,若移位后符號位發(fā)生變化,則標志位OF=1,否則OF=0。CNT>1時,對OF無定義。(1)邏輯左移指令(2)邏輯右移指令格式:SHRdest,CNT 功能:目標操作數(shù)右移CNT次,最低位移至標志位CF中,最高位補0。說明:CNT代表移動次數(shù)。當CNT>1時,必須由寄存器CL說明。CF、ZF、SF、PF的值由運算結果定。CNT=1時,若移位后符號位發(fā)生變化,則標志位OF=1,否則OF=0。CNT>1時,對OF無定義。(2)邏輯右移指令(3)算術左移指令格式:SALdest,CNT 功能:目標操作數(shù)左移CNT次,最低位補0,最高位移至標志位CF中。
說明:CNT代表移動次數(shù)。當CNT>1時,必須由寄存器CL說明。CF、ZF、SF、PF的值由運算結果定。CNT=1時,若移位后符號位發(fā)生變化,則標志位OF=1,否則OF=0。CNT>1時,對OF無定義。(3)算術左移指令(4)算術右移指令格式:SARdest,CNT 功能:目標操作數(shù)右移CNT次,最低位移至標志位CF中,最高位不變。說明:CNT代表移動次數(shù)。當CNT>1時,必須由寄存器CL說明。CF、ZF、SF、PF的值由運算結果定。CNT=1時,若移位后符號位發(fā)生變化,則標志位OF=1,否則OF=0。CNT>1時,對OF無定義。(4)算術右移指令例如,分別給出下列移位指令執(zhí)行結果。設AL=0B4H=10110100B,CF=1,CL=4。SALAL,1 ;AL=01101000B,CF=1,OF=1SARAL,1 ;AL=11011010B,CF=0,OF=0SHLAL,1 ;AL=01101000B,CF=1,OF=1SHRAL,CL ;AL=00001011B,CF=0,OF無定義例如,分別給出下列移位指令執(zhí)行結果。設AL=0B4H=101移位指令的使用說明這組指令除了可以實現(xiàn)基本的移位操作外,還可以用于實現(xiàn)數(shù)倍增(左移)或倍減(右移),使用這種方法比直接使用乘、除法效率要高得多。在不溢出的情況下,可用邏輯移位指令實現(xiàn)無符號數(shù)的乘、除,算術移位指令實現(xiàn)符號數(shù)的乘、除。移位指令的使用說明這組指令除了可以實現(xiàn)基本的移位操作外,還可【例3-17】
設無符號數(shù)X在寄存器AL中,用移位指令實現(xiàn)X*10的運算。MOVAH,0SALAX,1 ;AX←數(shù)X*2MOVBX,AX MOVCL,2SALAX,CL ;AX←數(shù)X*8ADDAX,BX ;AX←數(shù)X*10【例3-17】設無符號數(shù)X在寄存器AL中,用移位指令實現(xiàn)3.循環(huán)移位指令3.循環(huán)移位指令(1)不帶進位位循環(huán)左移指令格式:ROLdest,CNT 功能:目標操作數(shù)循環(huán)左移CNT次,最高位移至最低位的同時移至標志位CF中。說明:CNT代表移動次數(shù)。CNT>1時,必須由寄存器CL說明。CF由運算結果定;不影響SF、ZF、AF、PF;對OF的影響同SHL。(1)不帶進位位循環(huán)左移指令(2)不帶進位位循環(huán)右移指令格式:RORdest,CNT 功能:目標操作數(shù)循環(huán)右移CNT次,最低位移至最高位的同時移至標志位CF中。
說明:CNT代表移動次數(shù),CNT>1時,必須由寄存器CL說明。CF由運算結果定;不影響SF、ZF、AF、PF;對OF的影響同SHL。(2)不帶進位位循環(huán)右移指令(3)帶進位位循環(huán)左移指令格式:RCLdest,CNT功能:目標操作數(shù)及標志位CF一起循環(huán)左移CNT次,最高位移至標志位中,標志位移至最低位。
說明:CNT代表移動次數(shù),CNT>1時,必須由寄存器CL說明。CF由運算結果定;不影響SF、ZF、AF、PF;對OF的影響同SHL。(3)帶進位位循環(huán)左移指令(4)帶進位位循環(huán)右移指令格式:RCRdest,CNT功能:目標操作數(shù)及標志位CF一起循環(huán)右移CNT次,最低位移至標志位中,標志位移至最高位。說明:CNT代表移動次數(shù),CNT>1時,必須由寄存器CL說明。CF由運算結果定;不影響SF、ZF、AF、PF;對OF的影響同SHL。(4)帶進位位循環(huán)右移指令例如,設AL=01010100B,CF=1,CL=4,則:ROLAL,1 ;AL=10101000B,CF=0,OF=1RORAL,1 ;AL=00101010B,CF=0,OF=0RCLAL,1 ;AL=10101001B,CF=0,OF=1RCRAL,CL ;AL=10010101B,CF=0,OF無定義例如,設AL=01010100B,CF=1,CL3.3.4串操作指令所謂“串”是指一組數(shù)據(jù)。串操作指令的操作對象不是一字節(jié)或一個字,而是內(nèi)存中地址連續(xù)的一組字節(jié)或一組字。在默認的情況下,串操作指令的源串存于數(shù)據(jù)段,目標串存于附加段。在每一次基本操作后,能夠自動修改源及目標地址為下一次操作做好準備。串操作指令前通常加上重復前綴,此時,基本操作在滿足條件的情況下得到重復,直至完成預設次數(shù)。3.3.4串操作指令所謂“串”是指一組數(shù)據(jù)。1.基本串操作指令(1)串傳送指令格式一:MOVSdest,src格式二:MOVSB格式三:MOVSW功能:(ES:DI)←(DS:SI);SI←SI+1/2;DI←DI+1/21.基本串操作指令(1)串傳送指令MOVS指令使用說明格式一中的dest,src僅為了增加程序的可讀性。字節(jié)操作時,使用格式二,地址調(diào)整量是1;字操作時,使用格式三,地址調(diào)整量是2。地址是增或減由標志位DF決定:DF=0,地址增;DF=1,地址減。尋址方式規(guī)定為寄存器間接尋址:源操作數(shù)隱含為數(shù)據(jù)段,偏移地址由寄存器SI指明,允許段超越。目標操作數(shù)隱含為附加段,偏移地址由寄存器DI指明,不允許段超越。MOVS指令使用說明格式一中的dest,src僅為了增加程序(2)串裝入指令格式一:LODSsrc格式二:LODSB格式三:LODSW 功能:AL←(DS:SI);SI←SI+1/2 (2)串裝入指令(3)串送存指令格式一:STOSdest格式二:STOSB格式三:STOSW 功能:(ES:DI)←AL/AX;DI←DI+1/2 (3)串送存指令(4)串比較指令格式一:CMPSsrc,dest格式二:CMPSB格式三:CMPSW 功能:(DS:SI)-(ES:DI);SI←SI+1/2;DI←DI+1/2(4)串比較指令(5)串掃描指令格式一:SCASdest格式二:SCASB格式三:SCASW 功能:AL/AX-(ES:DI);DI←DI+1/2說明:指令STD、CLD用于設置方向標志。STD使DF為1,CLD使DF為0。(5)串掃描指令2.重復前綴指令基本串操作指令完成一個數(shù)據(jù)的操作,如果要操作一組數(shù)據(jù),就需要在基本串操作指令前加上重復前綴。重復前綴指明該指令的基本操作是否被重復、重復的條件是什么。基本操作的重復次數(shù)隱含在寄存器CX中。2.重復前綴指令基本串操作指令完成一個數(shù)據(jù)的操作,如果要操作(1)無條件重復前綴指令格式:REP功能:REP前綴加在串指令MOVS、STOS之前,控制串指令重復執(zhí)行。串指令重復執(zhí)行的次數(shù)保存在寄存器CX中。每執(zhí)行一次串指令,CX←(CX)-1,直到CX=0為止。(1)無條件重復前綴指令(2)相等重復前綴指令格式一:REPE格式二:REPZ功能:REPZ或REPE前綴加在串指令CMPS、SCAS指令前,控制串指令重復執(zhí)行。當(CX)≠0且ZF=1時,串指令重復執(zhí)行;當(CX)=0或ZF=0時,串指令重復執(zhí)行結束。(2)相等重復前綴指令(3)不相等重復前綴REPNE或REPNZ格式一:REPNE格式二:REPNZ功能:REPNZ或REPNE前綴加在串指令CMPS、SCAS指令前,控制串指令重復執(zhí)行。當(CX)≠0且ZF=0時,串指令重復執(zhí)行;當(CX)=0或ZF=1時,串指令重復執(zhí)行結束。說明:帶前綴的串操作指令執(zhí)行后,CX-1操作不影響標志位。(3)不相等重復前綴REPNE或REPNZ【例3-18】
編寫匯編程序段,把自SAREA開始的100個字復制到DAREA開始的區(qū)域中?!纠?-18】編寫匯編程序段,把自SAREA開始的100(1)源、目標區(qū)沒有重疊MOVAX,SEGSAREA ;MOVDS,AX;源區(qū)段地址送段寄存器DSMOVAX,SEGDAREA MOVES,AX;目標區(qū)段地址送段寄存器DSLEASI,SAREA;源區(qū)首字的偏移地址送SILEADI,DAREA ;目標區(qū)首字的偏移地址送DIMOVCX,100;串長送寄存器CXCLD;DF=0,地址增REPMOVSW;串傳送(1)源、目標區(qū)沒有重疊(2)源、目標區(qū)有重疊MOVCX,200 ;串長送寄存器CXMOVAX,SEGSAREAMOVDS,AX ;源區(qū)段地址送DSMOVAX,SEGDAREAMOVES,AX;目標區(qū)段地址送DSLEASI,SAREAADDSI,CX;源區(qū)末字的偏移地址送SIDECSILEADI,DAREAADDDI,CX;目標區(qū)末字的偏移地址送DIDECDISTD;DF=1,地址減REPMOVSB;串傳送(2)源、目標區(qū)有重疊MOVCX,200【例3-19】
編寫匯編程序段,將內(nèi)存DS:2100H~DS:2110H存儲區(qū)清0。MOVAX,DS ;目標段段地址送ESMOVES,AXMOVDI,2100 ;目標段首字節(jié)偏移地址送DIMOVCX,10H ;串長送寄存器CXCLD;設置方向增MOVAL,0REPSTOSB ;重復串送存【例3-19】編寫匯編程序段,將內(nèi)存DS:2100H~D3.3.5控制轉移指令8086程序的執(zhí)行順序由代碼段寄存器CS和指令指針寄存器IP的值決定。程序可以按順序執(zhí)行,也可以根據(jù)情況改變程序的執(zhí)行順序??刂妻D移指令就是通過改變CS和IP的值來實現(xiàn)程序的轉移。3.3.5控制轉移指令8086程序的執(zhí)行順序由代碼段寄存器C控制轉移指令根據(jù)程序轉移地址的不同,分為段內(nèi)轉移和段間轉移。段內(nèi)轉移是指程序在同一代碼段內(nèi)轉移,這時只要改變IP的值。段間轉移指程序將轉移到其他段,此時CS和IP的值同時改變??刂妻D移指令根據(jù)程序轉移地址的不同,分為段內(nèi)轉移和段間轉移。1.無條件轉移指令無條件轉移指令執(zhí)行后,程序無條件轉移到段內(nèi)由指令中給出的目標地址處。(1)段內(nèi)直接轉移指令格式一:JMP標號格式二:JMP立即數(shù)指令完成的操作:IP←(IP)+以標號或立即數(shù)給出的偏移量,(CS)不變。1.無條件轉移指令無條件轉移指令執(zhí)行后,程序無條件轉移到段內(nèi)例如:JMP2010H ;IP←2010HJMPSHORT L ;IP←(IP)+8位移量JMPNEAR NEXT ;IP←(IP)+16位移量例如:(2)段內(nèi)間接轉移指令格式一:JMP寄存器格式二:JMP存儲單元指令完成的操作:(IP)←寄存器或存儲單元的值,(CS)不變。例如:JMPBX ;IP←(BX)JMPWORDPTR[SI] ;IP←(DS:SI)(2)段內(nèi)間接轉移指令(3)段間直接轉移格式:JMP FAR PTR標號指令完成的操作:(IP)←標號所在存儲單元的偏移地址,(CS)←標號所在存儲單元的段地址。例如:JMPFARPTRNEXT ;(IP)←標號NEXT的偏移地址 ;(CS)←標號NEXT的段地址(3)段間直接轉移(4)段間間接轉移格式:JMPDWORDPTR存儲單元指令完成的操作:(IP)←標號指出的雙字存儲單元的低16位,(CS)←標號給出的雙字存儲單元的高16位。例如:JMPDWORDPTR[SI] ;IP←(DS:SI),CS←(DS:SI+2)(4)段間間接轉移2.條件轉移指令格式:Jcc標號功能:以標志位的狀態(tài)作為轉移依據(jù)。如果滿足轉移條件,則轉移到標號指示的指令處;否則,順序執(zhí)行下一條指令。說明:cc代表跳轉條件,short-label表明該指令只能實現(xiàn)段內(nèi)短轉移,參數(shù)形式通常為符號地址。2.條件轉移指令格式:Jcc標號(1)根據(jù)單個標志位的狀態(tài)判斷的轉移指令指令轉移條件說明JCdestCF=1有進位/借位時,轉移JNCdestCF=0無進位/借位時,轉移JZ/JEdestZF=1相等或等于0時,轉移JNZ/JNEdestZF=0不相等或等于0時,轉移JSdestSF=1為負數(shù)時,轉移JNSdestSF=0為正數(shù)時,轉移JOdestOF=1有溢出時,轉移JNOdestOF=0無溢出時,轉移JPdestPF=11的個數(shù)為偶數(shù)時,轉移JNPdestPF=01的個數(shù)為奇數(shù)時,轉移(1)根據(jù)單個標志位的狀態(tài)判斷的轉移指令指令轉移JZ指令用法舉例例如:SUBAX,0JZZERO ;當AX=0時,程序轉移到ZERO處執(zhí)行JZ指令用法舉例例如:(2)根據(jù)兩個無符號數(shù)的比較結果判斷的轉移指令指令轉移條件說明JA/JNBEdestCF=0且ZF=0X>Y時,轉移J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度跨境電商擔保交易安全保障合同
- 2025年度大型水利工程基礎施工勞務分包合同
- 2025年度建材行業(yè)節(jié)能產(chǎn)品認證服務合同
- 2025年度建筑行業(yè)綠色認證咨詢服務合同
- 2025年度新媒體廣告牌廣告合作合同
- 2025年度建筑節(jié)能建筑給排水工程承包合同
- 2025年度建筑企業(yè)與高校合作建筑項目管理人才培養(yǎng)合同
- 2025年度全屋定制家具設計與安裝合同
- 2025年度建筑工程勞務質量保證合同范本 - 副本
- 2025年度國際保險代理與經(jīng)紀服務合同
- 2024-2025學年湖北省武漢市部分重點中學高一上學期期末聯(lián)考數(shù)學試卷(含答案)
- 第五章 曲線運動(基礎夯實)-高一物理人教版(2019)必修二單元鞏固檢測
- 排球正面上手傳球 說課稿-2023-2024學年高一上學期體育與健康人教版必修第一冊
- 2025年浙江省交通投資集團財務共享服務中心招聘2名高頻重點提升(共500題)附帶答案詳解
- 做投標文件培訓
- 9.4+跨學科實踐:制作簡易活塞式抽水機課件+-2024-2025學年人教版物理八年級下冊
- 建筑工程工作計劃
- 2025年中國國際投資促進中心限責任公司招聘管理單位筆試遴選500模擬題附帶答案詳解
- 瓶裝液化氣送氣工培訓
- 外科護理課程思政課程標準
- 船舶航行安全
評論
0/150
提交評論