影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)

上傳人:1888****888 文檔編號:48644073 上傳時間:2022-01-12 格式:PPT 頁數(shù):305 大小:3.21MB
收藏 版權申訴 舉報 下載
《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)_第1頁
第1頁 / 共305頁
《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)_第2頁
第2頁 / 共305頁
《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)_第3頁
第3頁 / 共305頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)》由會員分享,可在線閱讀,更多相關《《微型計算機原理》(王忠民版)PPT電子課件教案第4章80x86指令系統(tǒng)(305頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第4章 80 x86指令系統(tǒng) 第4章 80 x86指令系統(tǒng) 4.1 8086/8088指令系統(tǒng)指令系統(tǒng) 4.2 80 x86/Pentium指令系統(tǒng)指令系統(tǒng) 第4章 80 x86指令系統(tǒng) 4.1 8086/8088指令系統(tǒng)指令系統(tǒng) 4.1.1 8086/8088指令格式指令格式 用匯編語言編寫的匯編語言程序輸入計算機后,必須由“匯編程序”將它翻譯成由機器指令(指令碼)組成的機器語言程序,才能由計算機識別并執(zhí)行。因此匯編語言程序需由匯編程序翻譯成可執(zhí)行的機器語言程序,一般來說,這一過程不必由人來干預。我們這里只介紹一下基本原理,以便在必要時也可以手工完成類似的工作。 第4章 80 x86指令系統(tǒng)

2、 8086/8088指令系統(tǒng)的指令類型較多,功能很強。各種指令由于功能不同,需要指令碼提供的信息也不同。為了滿足不同功能的要求又要盡量減少指令所占的空間,8086/8088指令系統(tǒng)采用了一種靈活的、由16個字節(jié)組成的變字長的指令格式,包括操作碼、尋址方式以及操作數(shù)三個部分,如圖4.1所示。 通常指令的第一字節(jié)為操作碼字節(jié)(OPCODE),規(guī)定指令的操作類型;第二字節(jié)為尋址方式字節(jié)(MOD),規(guī)定操作數(shù)的尋址方式;接著以后的36字節(jié)依據(jù)指令的不同而取舍,可變字長的指令主要體現(xiàn)在這里,一般由它指出存儲器操作數(shù)地址的位移量或立即數(shù)。 第4章 80 x86指令系統(tǒng) OPCODEdata/disp-8O

3、PCODEMODOPCODEMODdata/disp-LoOPCODEMODdata/disp-Hidisp-LoOPCODEMODdisp-Hidata-8disp-LoOPCODEMODdisp-Hidisp-Lodisp-Hi圖4.1 8086/8088不同字長的指令碼格式 第4章 80 x86指令系統(tǒng) 操作碼操作碼/尋址方式字節(jié)格式如下:尋址方式字節(jié)格式如下: 第一字節(jié)中,指示操作數(shù)類型:W=0為字節(jié),W=1為字;D指示操作數(shù)的傳送方向:D=0表示寄存器操作數(shù)為源操作數(shù),D=1表示寄存器操作數(shù)為目的操作數(shù)。 第二字節(jié)指出所用的兩個操作數(shù)存放的位置,以及存儲器中操作數(shù)偏移地址的計算方法。

4、其中: 第4章 80 x86指令系統(tǒng) REG字段規(guī)定一個寄存器操作數(shù),它作為源操作數(shù)還是目的操作數(shù)已由第一字節(jié)中的D位規(guī)定。由REG字段選擇寄存器的具體規(guī)定如表4.1所示。 表4.1 REG字段編碼表 REGW=1(字操作) W=0(字節(jié)操作) 000AXAL001CXCL010DXDL011BXBL100SPAH101BPCH110SIDH111DIBH第4章 80 x86指令系統(tǒng) MOD字段用來區(qū)分另一個操作數(shù)在寄存器中(寄存器尋址)還是在存儲器中(存儲器尋址),在存儲器尋址的情況下,還用來指出該字節(jié)后面有無位移量,有多少位位移量。MOD字段的編碼如表4.2所示。 表4.2 MOD字段編碼

5、表 MOD尋址方式 00存儲器尋址,沒有位移量 01存儲器尋址,有8位位移 10存儲器尋址,有16位位移 11寄存器尋址,沒有位移量 第4章 80 x86指令系統(tǒng) R/M字段受MOD字段控制。MOD=11為寄存器方式,R/M字段將指出第二操作數(shù)所在的寄存器編號;MOD=00,01,10為存儲器方式,R/M則指出如何計算存儲器中操作數(shù)的偏移地址。MOD與R/M字段組合的尋址方式見表4.3。 第4章 80 x86指令系統(tǒng) 表表4.3 MOD與與R/M字段組合的尋址方式字段組合的尋址方式 第4章 80 x86指令系統(tǒng) 例例4.1 MOV AH,BX+DI+50H 代碼格式: 100010100110

6、000101010000OPCODE D W MOD REG R/M disp8指令碼為:8A6150H 第4章 80 x86指令系統(tǒng) 例例 4.2 ADD dispBXDI,DX ;disp=2345H 代碼格式: 00000001100100010101000000100011OPCODE D W MOD REG R/M dispHi disp-Hi指令碼為:01914523H 第4章 80 x86指令系統(tǒng) 4.1.2 8086/8088指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式 1操作數(shù)的種類操作數(shù)的種類 1) 數(shù)據(jù)操作數(shù) 這類操作數(shù)是與數(shù)據(jù)有關的操作數(shù),即指令中操作的對象是數(shù)據(jù)。數(shù)據(jù)操作數(shù)又

7、可分為: (1) 立即數(shù)操作數(shù)。指令中要操作的數(shù)據(jù)包含在指令中。 (2)寄存器操作數(shù)。指令中要操作的數(shù)據(jù)存放在指定的寄存器中。 (3)存儲器操作數(shù)。指令中要操作的數(shù)據(jù)存放在指定的存儲單元中。 (4)I/O操作數(shù)。指令中要操作的數(shù)據(jù)來自或送到I/O端口。第4章 80 x86指令系統(tǒng) 2) 地址操作數(shù) 這類操作數(shù)是與程序轉移地址有關的操作數(shù),即指令中操作的對象不是數(shù)據(jù),而是要轉移的目標地址。它也可以分為立即數(shù)操作數(shù)、寄存器操作數(shù)和存儲器操作數(shù),即要轉移的目標地址包含在指令中,或存放在寄存器中,或存放在存儲單元之中。 對于數(shù)據(jù)操作數(shù),有的指令有兩個操作數(shù):一個稱為源操作數(shù),在操作過程中其值不改變;另

8、一個稱為目的操作數(shù),操作后一般被操作結果代替。有的指令只有一個操作數(shù),或沒有(或隱含)操作數(shù)。 對于地址操作數(shù),指令只有一個目的操作數(shù),它是一個供程序轉移的目標地址。 第4章 80 x86指令系統(tǒng) 2尋址方式 所謂尋址方式,就是指指令中給出的尋找操作數(shù)(包括數(shù)據(jù)操作數(shù)和地址操作數(shù))的方法。根據(jù)操作數(shù)的種類,8086/8088指令系統(tǒng)的尋址方式分為兩大類:數(shù)據(jù)尋址方式和地址尋址方式。 1) 數(shù)據(jù)尋址方式 數(shù)據(jù)尋址方式可分為立即數(shù)尋址方式、寄存器尋址方式、存儲器尋址方式和I/O端口尋址方式四種類型。 第4章 80 x86指令系統(tǒng) (1) 立即數(shù)尋址方式(Immediate Addressing)。

9、立即數(shù)尋址方式所提供的操作數(shù)直接包含在指令中,緊跟在操作碼之后,它作為指令的一部分,這種操作數(shù)稱為立即數(shù)。立即數(shù)可以是位的,也可以是16位的。如果是16位數(shù),則高位字節(jié)存放在高地址存儲單元中,低位字節(jié)存放在低地址存儲單元中。例如:MOV BL,80HMOV AX,1090H則指令執(zhí)行情況如圖4.2所示。執(zhí)行結果為:(BL)=80H,(AX)=1090H。 第4章 80 x86指令系統(tǒng) BL操作碼80H存儲器AX操作碼90H10H存儲器圖4.2 立即數(shù)尋址方式指令的執(zhí)行情況 第4章 80 x86指令系統(tǒng) (2) 寄存器尋址方式(Register Addressing)。寄存器尋址方式的操作數(shù)存放

10、在指令規(guī)定的寄存器中,寄存器的名字在指令中指出。對于16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP。對于位操作數(shù),寄存器可以是AH、AL、BH、BL、CH、CL、DH或DL。例如:MOV CL,DLMOV AX,BX如果(DL)=50H,(BX)=1234H,則指令執(zhí)行情況如圖4.3所示。執(zhí)行結果為:(CL)=50H,(AX)=1234H。 第4章 80 x86指令系統(tǒng) 50HCLDLAX12H34HBX圖4.3 寄存器尋址方式的指令執(zhí)行情況 由于寄存器尋址方式的操作數(shù)就在CPU內部的寄存器中,不需要訪問存儲器來取得操作數(shù),因而可以取得較高的運行速度。 第4章 80

11、x86指令系統(tǒng) (3) 存儲器尋址方式(Memory Addressing)。存儲器尋址方式的操作數(shù)存放在存儲單元中。在第3章中已經(jīng)知道,操作數(shù)在存儲器中的物理地址是由段地址左移4位與操作數(shù)在段內的偏移地址相加得到的。段地址在實模式和保護模式下可從不同途徑取得。本節(jié)要討論的問題是指令中是如何給出存儲器操作數(shù)在段內的偏移地址的。偏移地址又稱為有效地址(Effective Address,EA),所以存儲器尋址方式即為求得有效地址(EA)的不同途徑。 第4章 80 x86指令系統(tǒng) 有效地址可以由以下三種地址分量組成: 位移量(Displacement):它是存放在指令中的一個8位或16位的數(shù),但它

12、不是立即數(shù),而是一個地址。 基址(Base Address):它是存放在基址寄存器BX或BP中的內容。 變址(Index Addess):它是存放在變址寄存器SI或DI中的內容。 對于某條具體指令,這三個地址分量可有不同的組合。如果存在兩個或兩個以上的分量,那么就需要進行加法運算,求出操作數(shù)的有效地址(EA),進而求出物理地址(PA)。正是因為這三種地址分量有不同的組合,才使得對存儲器操作數(shù)的尋址產(chǎn)生了若干種不同的方式。 第4章 80 x86指令系統(tǒng) 直接尋址方式(Direct Addressing)。直接尋址方式的操作數(shù)有效地址只包含位移量一種分量,即在指令的操作碼后面直接給出有效地址。對這

13、種尋址方式有:EA=位移量。例如:MOV AL,1064H 如果(DS)=2000H,則指令執(zhí)行情況如圖4.4所示。執(zhí)行結果為:(AL)=45H。 第4章 80 x86指令系統(tǒng) 圖4.4 直接尋址方式的指令執(zhí)行情況AL操作碼64H10H存儲器45H20000H21064H20000H1064H21064H代碼段數(shù)據(jù)段第4章 80 x86指令系統(tǒng) 注意這種直接尋址方式與前面介紹的立即數(shù)尋址方式的不同。從指令的表示形式來看,在直接尋址方式中,對于表示有效地址的16位數(shù),必須加上方括號。從指令的功能上來看,本例指令的功能不是將立即數(shù)1064H 傳送到累加器AL,而是將一個有效地址是1064H的存儲單

14、元的內容傳送到AL。設此時數(shù)據(jù)段寄存器(DS)=2000H,則該存儲單元的物理地址為:PA=2000H10H+1064H=20000H+1064H=21064H第4章 80 x86指令系統(tǒng) 如果沒有特殊指明,直接尋址方式的操作數(shù)一般在存儲器的數(shù)據(jù)段中,即隱含的段寄存器是DS。但是8086/8088也允許段超越,此時需要在指令中特別標明,方法是在有關操作數(shù)的前面寫上操作數(shù)所在段的段寄存器名,再加上冒號。例如,若以上指令中源操作數(shù)不在數(shù)據(jù)段而在附加數(shù)據(jù)段中,則指令應寫為如下形式: MOV AL,ES:1064H 在匯編語言指令中,可以用符號地址來表示位移量。例如: MOV AL,value 或MO

15、V AL,value此時value為存儲單元的符號地址。 第4章 80 x86指令系統(tǒng) 寄存器間接尋址方式(Register Indirect Addressing)。寄存器間接尋址方式的操作數(shù)有效地址只包含基址寄存器(BX)的內容或變址寄存器(SI、DI)的內容一種分量。因此,操作數(shù)的有效地址在某個寄存器中,而操作數(shù)本身則在存儲器中的數(shù)據(jù)段內。這與寄存器尋址方式操作數(shù)就在寄存器中是不同的。 寄存器間接尋址方式的有效地址表示為: EA=(SI) (DI) (BX)第4章 80 x86指令系統(tǒng) 書寫指令時,用做間址的寄存器必須加上方括弧,以免與一般的寄存器尋址方式混淆。例如: MOV AX,SI

16、MOV BX,AL 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H,則上述兩條指令的執(zhí)行情況如圖4.5所示。執(zhí)行結果為:(AX)=4050H,(31000H)=64H。 第4章 80 x86指令系統(tǒng) 存儲器50H40H30000H32000HAX(DS)10H30000H(SI) 2000H32000H存儲器30000H31000HAL64H(DS)10H30000H(BX) 1000H31000H圖4.5 寄存器間接尋址方式的指令執(zhí)行情況 同樣,寄存器間接尋址方式也允許段超越。 例如: MOV ES:DI,AX 第4章 80 x86指令系統(tǒng) 寄存器相對

17、尋址方式(Register Relative Addressing)。寄存器相對尋址方式的操作數(shù)有效地址EA是一個基址寄存器或變址寄存器的內容和指令中給定的8位或16位位移量相加之和,所以有效地址由兩種分量組成??捎米黾拇嫫飨鄬ぶ贩绞降募拇嫫饔谢芳拇嫫鰾X、BP和變址寄存器SI、DI。即 (SI)(DI)(BX)(BP)EA=+disp8/disp16第4章 80 x86指令系統(tǒng) 上述位移量可以看成是一個存放于寄存器中的基值的一個相對值,故稱為寄存器相對尋址方式。在一般情況下,若指令中指定的寄存器是BX、SI、DI,則操作數(shù)默認為存放在數(shù)據(jù)段中;若指令中指定的寄存器是BP,則操作數(shù)默認為存

18、放在堆棧段中。同樣,寄存器相對尋址方式也允許段超越。 位移量既可以是一個8位或16位的立即數(shù),也可以是符號地址。例如:MOV SI+10H,AX MOV CX,BX+COUNT 第4章 80 x86指令系統(tǒng) 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H,則指令執(zhí)行情況如圖4.6所示。執(zhí)行結果為:(32010H)=4050H,(CX)=4030H。 CX操作碼50H10H存儲器30H30000H32050H操作碼40H(DS)10H30000H(BX) 1000HCOUNT 1050H32050H50HAX操作碼10H存儲器3

19、0000H32010H操作碼(DS)10H30000H(SI) 2000H10H32010H40H圖圖4.6 寄存器相對尋址方式的指令執(zhí)行情況寄存器相對尋址方式的指令執(zhí)行情況 第4章 80 x86指令系統(tǒng) 該尋址方式的操作數(shù)在匯編語言指令中書寫時可以是下述形式之一:MOV AL,BP+TABLEMOV AL,BP+ TABLEMOV AL,TABLEBP 其實以上三條指令代表的是同一功能的指令。其中TABLE為8位或16位位移量。 第4章 80 x86指令系統(tǒng) 基址變址尋址方式(Based Indexed Addressing)?;纷冎穼ぶ贩绞降牟僮鲾?shù)有效地址是一個基址寄存器(BX或BP)和

20、一個變址寄存器(SI或DI)的內容之和,所以有效地址由兩種分量組成。即 )()()()(BPBXDISIEA 在一般情況下,由基址寄存器決定操作數(shù)在哪個段中。若用BX的內容作為基地址,則操作數(shù)在數(shù)據(jù)段中;若用BP的內容作為基地址,則操作數(shù)在堆棧段中?;纷冎穼ぶ贩绞酵瑯右苍试S段超越。例如:MOV BX+DI,AX MOV AH,BPSI 第4章 80 x86指令系統(tǒng) 設當前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=1200H,則指令的執(zhí)行情況如圖4.7所示。執(zhí)行結果為:(32100H)=0050

21、H,(AH)=56H。 存儲器30000H32100H00HAX50H(DS)10H30000H(BX) 1000H(DI) 1100H32100H存儲器56H40000H43200HAH(SS)10H40000H(BP) 2000H(SI) 1200H43200H圖4.7 基址變址尋址方式的指令執(zhí)行情況第4章 80 x86指令系統(tǒng) 該尋址方式的操作數(shù)在匯編語言指令中書寫時可以是下列形式之一:MOV AX,BP+SI MOV AX,BPSI 第4章 80 x86指令系統(tǒng) 基址變址相對尋址方式(Based Indexed Relative Addressing)?;纷冎废鄬ぶ贩绞降牟僮鲾?shù)有效

22、地址是一個基址寄存器內容、一個變址寄存器內容與指令中指定的一個8位或16位位移量之和,所以有效地址由三個分量組成。即 16/8)()()()(dispdispBPBXDISIEA第4章 80 x86指令系統(tǒng) 同樣,當基址寄存器為BX時,操作數(shù)在數(shù)據(jù)段中;基址寄存器為BP時,操作數(shù)在堆棧段中?;纷冎废鄬ぶ贩绞酵瑯右苍试S段超越。例如: MOV AH,BX+DI+1234HMOV BP+SI+DATA,CX 若(DS)=4000H,(SS)=5000H,(BX)=1000H,(DI)=1500H,(BP)=2000H,(SI)=1050H,(CX)=2050H,DATA=10H,則指令執(zhí)行情況如

23、圖4.8所示。執(zhí)行結果為:(AH)=64H,(53060H)=2050H。 第4章 80 x86指令系統(tǒng) 基址變址相對尋址方式也可以表示成以下幾種不同的形式:MOV AX,BX+SI+COUNTMOV AX,BXSI +COUNTMOV AX,BX+SICOUNT MOV AX,BXSICOUNT MOV AX,COUNTBXSI 第4章 80 x86指令系統(tǒng) 存儲器64H40000H43734HAH(DS)10H40000H(BX) 1000H(DI) 1500H1234H43734H存儲器50000H53060H20HCX50H(SS)10H50000H(BP) 2000H(SI) 105

24、0HDATA 10H53060H圖4. 8 基址變址相對尋址方式的指令執(zhí)行情況 第4章 80 x86指令系統(tǒng) (4) I/O端口尋址方式。I/O端口尋址有以下兩種尋址方式: 端口直接尋址方式。對這種尋址方式,端口地址用8位立即數(shù)(0255)表示。例如:IN AL,21H 此指令表示從地址為21H的端口中讀取數(shù)據(jù)送到AL中。假設21H端口提供的數(shù)據(jù)為7FH,則指令執(zhí)行情況如圖4.9所示。執(zhí)行結果為:將21H端口提供的數(shù)據(jù)7FH輸入到8位寄存器AL中。 第4章 80 x86指令系統(tǒng) 端口間接尋址方式。當I/O端口地址大于FFH時,必須事先將端口地址存放在DX寄存器中。例如: MOV DX,120H

25、 OUT DX,AX 前一條指令將端口地址120H送到DX寄存器,后一條指令將AX中的內容輸出到地址由DX寄存器內容所指定的端口中。指令執(zhí)行情況如圖4.10所示。執(zhí)行結果為:將AX寄存器的內容輸出到120H端口。 第4章 80 x86指令系統(tǒng) 7FH接口端口0端口1端口33端口25500H01H21HFFHAL圖4.9 端口直接尋址的指令執(zhí)行情況 第4章 80 x86指令系統(tǒng) 接口端口0端口1端口288端口655350000H0001H0120HFFFFH10F0HAX0120HDX圖4.10 端口間接尋址的指令執(zhí)行情況 第4章 80 x86指令系統(tǒng) 2) 地址尋址方式 在8086/8088指

26、令系統(tǒng)中,有一組指令被用來控制程序的執(zhí)行順序。程序的執(zhí)行順序是由CS和IP的內容所決定的。通常情況下,當BIU完成一次取指周期后,就自動改變IP的內容以指向下一條指令的地址,使程序按預先存放在程序存儲器中的指令的次序,由低地址到高地址順序執(zhí)行。如需要改變程序的執(zhí)行順序,當轉移到所要求的指令地址再順序執(zhí)行時,可以安排一條程序轉移指令,并按指令的要求修改IP內容或同時修改IP和CS的內容,從而將程序轉移到指令所指定的轉移地址。地址尋址方式就是找出程序轉移的地址。轉移地址可以在段內(稱為段內轉移),也可以跨段(稱段間轉移)。尋求轉移地址的方法稱為地址尋址方式,它有如下四種方式。 第4章 80 x86

27、指令系統(tǒng) (1) 段內直接尋址方式。段內直接尋址方式也稱為相對尋址方式。轉移的地址是當前的IP內容和指令規(guī)定的下一條指令到目標地址之間的8位或16位相對位移量之和,相對位移量可正可負。當位移量是8位時,稱為短轉移,轉移范圍為128+127;位移量是16位時,稱為近轉移,轉移范圍為32768+32767。這種尋址方式適用于無條件轉移或條件轉移類指令。但條件轉移里只有8位位移量的短轉移。 第4章 80 x86指令系統(tǒng) 段內直接尋址轉移指令的格式可以表示為:JMP NEAR PTR PROGIAJMP SHORT QUEST 其中,PROGIA和QUEST均為轉向的目標地址,在機器指令中,用位移量來

28、表示。在匯編語言中,如果位移量為16位,則在目標地址前加操作符NEAR PTR;如果位移量為位,則在目標地址前加操作符SHORT。但是,如果目標地址的標號已經(jīng)定義(即標號先定義后引用),那么,即使在標號前沒有寫運算符SHORT,匯編程序也能自動生成一個2字節(jié)的短轉移指令。這種情況屬于隱含的短轉移。 第4章 80 x86指令系統(tǒng) (2) 段內間接尋址方式。該尋址方式的程序轉移地址存放在寄存器或存儲單元中。存儲器可用各種數(shù)據(jù)尋址方式表示。指令的操作是用指定的寄存器或存儲器中的值取代當前IP的內容,以實現(xiàn)程序的段內轉移。 這種尋址方式以及以下的兩種段間尋址方式都不能用于條件轉移指令。也就是說,條件轉

29、移指令只能使用段內直接尋址的位位移量。 第4章 80 x86指令系統(tǒng) 段內間接尋址轉移指令的格式可以表示為:JMP BXJMP WORD PTR BP+TABLE 其中WORD PTR為操作符,用以指出其后的尋址方式所取得的目標地址是一個字的有效地址。 第4章 80 x86指令系統(tǒng) (3) 段間直接尋址方式。這種尋址方式是在指令中直接給出16位的段地址和16位的偏移地址用來更新當前的CS和IP的內容。指令的格式可以表示為:JMP LABEL_NAME JMP FAR PTR NEXTROUTINT其中,LABEL_NAME是一個在另外的代碼段內已定義的遠標號。指令的操作是用標號的偏移地址取代指

30、令指針寄存器IP的內容,同時用標號所在段的段地址取代當前代碼段寄存器CS的內容,結果使程序轉移到另一代碼段內指定的標號處。第二條指令利用運算符將標號NEXTROUTINT的屬性定義為FAR。 第4章 80 x86指令系統(tǒng) (4) 段間間接尋址方式。這種尋址方式是由指令中給出的存儲器尋址方式求出存放轉移地址的四個連續(xù)存儲單元的地址。指令的操作是將存儲器的前兩個單元的內容送給IP,后兩個單元的內容送給CS,以實現(xiàn)到另一個段的轉移。 以下是兩條段間間接轉移指令的例子:JMP VAR_DOUBLEWORDJMP DWORD PTRBPDI上面第一條指令中,VAR_DOUBLEWORD應是一個已定義為3

31、2位的存儲器變量;第二條指令中,利用運算符PTR將存儲器操作數(shù)的類型定義為DWORD(雙字)。 第4章 80 x86指令系統(tǒng) 4.1.3 8086/8088指令系統(tǒng) 8086/8088的指令系統(tǒng)大致可分成以下六種類型: 數(shù)據(jù)傳送指令 算術運算指令 位操作指令 串操作指令 程序控制指令 處理器控制指令第4章 80 x86指令系統(tǒng) 1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令是程序中使用最頻繁的指令。這是因為不論程序針對何種具體的實際問題,往往都需要將原始數(shù)據(jù)、中間結果、最終結果以及其他各種信息在CPU的寄存器和存儲器或I/O端口之間多次傳送。 數(shù)據(jù)傳送指令按其功能的不同,可以分為通用數(shù)據(jù)傳送指令、輸

32、入輸出指令、目標地址傳送指令和標志傳送指令等四組。 第4章 80 x86指令系統(tǒng) 1) 通用數(shù)據(jù)傳送指令 通用數(shù)據(jù)傳送指令有以下四種。 (1) 數(shù)據(jù)傳送指令MOV (MOVement)。指令格式及操作: MOV dst,src ;(dst)(src) 指令格式中的dst表示目的操作數(shù),src表示源操作數(shù)(下同)。指令實現(xiàn)的操作是將源操作數(shù)送給目的操作數(shù)。這種傳送實際上是進行數(shù)據(jù)的“復制”,源操作數(shù)本身不變。 第4章 80 x86指令系統(tǒng) 這種雙操作數(shù)指令在匯編語言中的表示方法,總是將目的操作數(shù)寫在前面,源操作數(shù)寫在后面,二者之間用一個逗號隔開。 在MOV指令中源操作數(shù)可以是存儲器、寄存器、段寄

33、存器和立即數(shù);目的操作數(shù)可以是存儲器、寄存器(不能為IP)和段寄存器(不能為CS)。數(shù)據(jù)傳送的方向如圖4.11所示。 段寄存器CS DS SS ES存儲器通用存儲器AX BX CX DXBP SP SI DIALBLCL DLAHBHCH DH16位立即數(shù)16位8/16位8/16位8/16位圖4.11 MOV指令數(shù)據(jù)傳送方向 第4章 80 x86指令系統(tǒng) 必須注意,不能用一條MOV指令實現(xiàn)以下傳送: 存儲單元之間的傳送。 立即數(shù)至段寄存器的傳送。 段寄存器之間的傳送。 需說明一點,對于代碼段寄存器CS和指令指針寄存器IP,通常無需用戶利用傳送指令改變其中的內容。但是CS可以作為源操作數(shù)。 第4

34、章 80 x86指令系統(tǒng) (2) 堆棧操作指令。堆棧操作指令是用來完成壓入和彈出堆棧操作的。8086/8088指令系統(tǒng)中提供了完成這兩種操作的相應指令。 壓入堆棧指令PUSH (PUSH word onto stack)。指令格式及操作: PUSHsrc ;(SP)(SP)2,(SP)+1:(SP)(src) 第4章 80 x86指令系統(tǒng) 指令完成的操作是“先移后入”,即先將堆棧指針SP減2,使SP始終指向棧頂,然后再將操作數(shù)src壓入(SP)+1和(SP)兩個存儲單元中。指令中的操作數(shù)src可以是通用寄存器和段寄存器,也可以是由某種尋址方式所指示的存儲單元,但不能是立即數(shù)。例如: PUSH

35、AX ;(SP)(SP)2,(SP)+1)(AH),(SP)(AL)PUSH CSPUSH SI 第4章 80 x86指令系統(tǒng) 彈出堆棧指令POP (POP word off stack)。指令格式及操作:POP dst ;(dst)(SP)+1:(SP),(SP)(SP)+2 指令完成的操作是“先出后移”,即先將堆棧指針SP所指示的棧頂存儲單元的值彈出到操作數(shù)dst中,然后再將堆棧指針SP加2,使其指向棧頂。指令中的操作數(shù)dst可以是存儲器、通用寄存器或段寄存器(但不能是代碼段寄存器CS),同樣也不能是立即數(shù)。例如: POP BX ;(BL)(SP),(BH)(SP)+1), (SP)(SP

36、)+2 POP ES POP MEMDI 應該注意,堆棧操作指令中的操作數(shù)類型必須是字操作數(shù),即16位操作數(shù)。 第4章 80 x86指令系統(tǒng) (3) 數(shù)據(jù)交換指令XCHG (eXCHanGe)。指令格式及操作:XCHG dst,src ;(dst)(src) 該指令的操作是使源操作數(shù)與目的操作數(shù)進行交換,即不僅將源操作數(shù)傳送到目的操作數(shù),而且同時將目的操作數(shù)傳送到源操作數(shù)。 交換指令的源操作數(shù)和目的操作數(shù)各自均可以是寄存器或存儲器,但不能二者同時為存儲器。也就是說,可以在寄存器與寄存器之間,或者寄存器與存儲器之間進行交換。此外,段寄存器的內容不能參加交換。 交換的內容可以是一個字節(jié)(8位),也

37、可以是一個字(16位)。 第4章 80 x86指令系統(tǒng) (4) 字節(jié)轉換指令XLAT (transLATe)。指令格式及操作:XLAT src_table ;(AL)(BX)+(AL) XLAT指令是字節(jié)查表轉換指令,可以根據(jù)表中元素的序號,查出表中相應元素的內容。為了實現(xiàn)查表轉換,預先應將表的首地址,即表頭地址傳送到BX寄存器,元素的序號即位移量送AL,表中第一個元素的序號為0,然后依次是1,2,3,。執(zhí)行XLAT指令后,表中指定序號的元素存于AL。由于需要將元素的序號送AL寄存器,所以被尋址的表的最大長度為255個字節(jié)。這是一種特殊的基址變址尋址方式,基址寄存器為BX,變址寄存器為AL。利

38、用XLAT指令實現(xiàn)不同數(shù)制或編碼系統(tǒng)之間的轉換十分方便。 第4章 80 x86指令系統(tǒng) 圖4.12 十六進制數(shù)的ASCII碼表30H(0)31H(1)32H(2)39H(9)41H(A)42H(B)46H(F)存儲器Hex_table0Hex_table1Hex_table2Hex_table9Hex_table10Hex_table11Hex_table15第4章 80 x86指令系統(tǒng) 例如內存的數(shù)據(jù)段有一張十六進制數(shù)的ASCII碼表,其首地址為Hex_table,如圖4.12所示,為了查出第10個元素(元素序號從0開始),即十六進制數(shù)A的ASCII碼,可用以下幾條指令實現(xiàn):MOV BX,O

39、FFSET Hex_table;(BX)表首址MOV AL,0AH ;(AL)序號XLAT Hex_table ;查表轉換結果十六進制數(shù)A的ASCII碼在AL中,即(AL)=41H。 第4章 80 x86指令系統(tǒng) 上例中查表轉換指令后面的操作數(shù)首地址Hex_table(類型為字節(jié)),實際上已經(jīng)預先傳送到BX寄存器中,寫在XLAT指令中是為了匯編程序用以檢查類型的正確性。但是XLAT指令后面也可以不寫操作數(shù)。 BX寄存器中包含著表的首地址,所在的段由隱含值確定(即DS)。但也允許段超越,此時必須在指令中寫明重設的段寄存器。XLAT指令的幾種表示形式如下:XLAT;不寫操作數(shù)XLAT src_ta

40、ble ;寫操作數(shù)XLATB ;B表示字節(jié)類型,不允許再寫操作數(shù) XLAT ES:src_table ;重設段寄存器為ES,必須寫操作數(shù) 第4章 80 x86指令系統(tǒng) 2) 輸入輸出指令 輸入輸出指令共有兩條。輸入指令IN用于從外設端口讀入數(shù)據(jù),輸出指令OUT則向端口發(fā)送數(shù)據(jù)。無論是讀入的數(shù)據(jù)或是準備發(fā)送的數(shù)據(jù)都必須放在寄存器AL(字節(jié))或AX(字)中。 輸入輸出指令可以分為兩大類:一類是端口直接尋址的輸入輸出指令;另一類是端口通過DX寄存器間接尋址的輸入輸出指令。在直接尋址的指令中只能尋址256個端口(0255),而間接尋址的指令中可尋址64 K個端口(065535)。 第4章 80 x86

41、指令系統(tǒng) (1) 輸入指令IN (INput byte or word)。輸入指令分直接尋址輸入指令和間接尋址輸入指令。 直接尋址的輸入指令。指令格式及操作: IN acc,port ;(acc)(port) 指令中直接給出端口地址(地址小于0FFH),其功能為從指令中直接指定的端口中讀入一個字節(jié)或一個字送AL或AX。 第4章 80 x86指令系統(tǒng) 間接尋址的輸入指令。指令格式及操作:IN acc,DX ;(acc)(DX) 此指令是從DX寄存器內容指定的端口中將8/16位數(shù)據(jù)送入AL/AX中。這種尋址方式的端口地址由16位地址表示,執(zhí)行此指令前應將16位地址存入DX寄存器中。 第4章 80

42、x86指令系統(tǒng) (2) 輸出指令OUT (OUTput byte or word)。輸出指令分直接尋址輸出指令和間接尋址輸出指令。 直接尋址的輸出指令。指令格式及操作:OUT port,acc ;(port)(acc) 此指令將AL(8位)或AX(16位)中的數(shù)據(jù)輸出到指令指定的I/O端口,端口地址應不大于FFH。 第4章 80 x86指令系統(tǒng) 間接尋址的輸出指令。指令格式及操作:OUT DX,acc ;(DX)(acc) 此指令將AL(8位)或AX(16位)中的數(shù)據(jù)輸出到由DX寄存器內容指定的I/O端口中。 第4章 80 x86指令系統(tǒng) 3) 目標地址傳送指令 8086/8088 CPU提供

43、了三條把地址指針寫入寄存器或寄存器對的指令,它們可以用來寫入近地址指針和遠地址指針。 (1) 取有效地址指令LEA (Load Effective Address)。指令格式:LEA reg16,mem LEA指令將一個近地址指針寫入到指定的寄存器。指令中的目的操作數(shù)必須是一個16位通用寄存器,源操作數(shù)必須是一個存儲器操作數(shù),指令的執(zhí)行結果是把源操作數(shù)的有效地址,即16位偏移地址傳送到目標寄存器。例如: 第4章 80 x86指令系統(tǒng) LEA BX,BUFFER;(BX)OFFSET BUFFERLEA AX,BPDI;(AX)(BP)+(DI)LEA DX,BETABXSI;(DI)(BP)+

44、(SI)+BETA注意LEA指令與MOV指令的區(qū)別,比較下面兩條指令:LEA BX,BUFFER MOV BX,BUFFER 第4章 80 x86指令系統(tǒng) 前者將存儲器變量BUFFER的偏移地址送到BX,而后者將存儲器變量BUFFER的內容(兩個字節(jié))傳送到BX。當然也可以用MOV指令來得到存儲器的偏移地址,例如以下兩條指令的效果相同:LEA BX,BUFFERMOV BX,OFFSET BUFFER其中OFFSET BUFFER表示存儲器變量BUFFER的偏移地址。 第4章 80 x86指令系統(tǒng) (2) 地址指針裝入DS指令LDS (Load pointer into DS)。指令格式:LD

45、S reg16,mem32 LDS指令和下面即將介紹的LES指令都是用于寫入遠地址指針。源操作數(shù)是存儲器操作數(shù),目的操作數(shù)可以是任一個16位通用寄存器。 LDS傳送一個32位的遠地址指針,其中包括一個偏移地址和一個段地址,前者送指令中指定的寄存器(目的操作數(shù)),后者送數(shù)據(jù)段寄存器DS。例如: LDS SI,0010H設當前(DS)=C000H,而有關存儲單元的內容為(C0010H)=80H,(C0011H)=01H,(C0012H)=00H,(C0013H)=20H,則執(zhí)行該指令后,SI寄存器的內容為0180H,段寄存器DS的內容為2000H。 第4章 80 x86指令系統(tǒng) (3) 地址指針裝

46、入ES指令LES (Load pointer into ES)。指令格式: LES reg16,mem32 LES指令與LDS類似,也是裝入一個32位的遠地址指針。位移地址送指定寄存器,但是,段地址送附加段寄存器ES。 目標地址傳送指令常常用于在串操作時建立初始的地址指針。 第4章 80 x86指令系統(tǒng) 4) 標志傳送指令 8086/8088 CPU中有一標志寄存器FLAGS,其中包括6個狀態(tài)標志位和3個控制位。每一狀態(tài)標志位表示CPU運行的狀態(tài)。許多指令執(zhí)行結果會影響標志寄存器的某些狀態(tài)標志位。同時,有些指令的執(zhí)行也受標志寄存器中控制位的控制。標志傳送指令共有4條。這些指令都是單字節(jié)指令,指

47、令的操作數(shù)為隱含形式。 第4章 80 x86指令系統(tǒng) (1) 取標志指令LAHF (Load AH from Flags)。指令格式: LAHF LAHF指令將標志寄存器FLAGS中的5個狀態(tài)標志位SF、ZF、AF、PF以及CF分別取出傳送到累加器AH的對應位,如圖4.13所示。LAHF指令對狀態(tài)標志位沒有影響。 OF DF IF TF SF ZF AF PF CFAHFLAGS圖4.13 LAHF指令操作示意圖 第4章 80 x86指令系統(tǒng) (2) 置標志指令SAHF (Store AH into Flags)。指令格式: SAHF SAHF指令的傳送方向與LAHF相反,將AH寄存器中的第7

48、、6、4、2、0位分別傳送到標志寄存器的對應位,如圖4.14所示。 OF DF IF TF SF ZF AF PF CFAHFLAGS圖4.14 SAHF指令操作示意圖 第4章 80 x86指令系統(tǒng) (3) 標志壓入堆棧指令PUSHF (PUSH Flags onto stack)。指令格式及操作:PUSHF ;(SP)(SP)2,(SP)+1):(SP)(FLAGS) PUSHF指令先將SP減2,然后將標志寄存器FLAGS的內容(16位)壓入堆棧。這條指令本身不影響狀態(tài)標志位。 第4章 80 x86指令系統(tǒng) (4) 標志彈出堆棧指令POPF (POP Flags off stack)。指令格

49、式及操作:POPF ;(FLAGS)(SP)+1:(SP),(SP)(SP)+2 POPF指令的操作與PUSHF相反,它將堆棧內容彈出到標志寄存器,然后SP加2。POPF指令對狀態(tài)標志位有影響,使各狀態(tài)標志位恢復為壓入堆棧以前的狀態(tài)。 PUSHF指令可用于調用過程時保護當前標志寄存器的值,過程返回以后再使用POPF指令恢復標志寄存器原來的值。 數(shù)據(jù)傳送指令除了SAHF和POPF外都不影響狀態(tài)標志位。 第4章 80 x86指令系統(tǒng) 2算術運算指令 1) 算術運算的數(shù)據(jù)類型 8086/8088的算術運算指令可以處理四種類型的數(shù):無符號的二進制數(shù)、帶符號的二進制數(shù)、無符號的壓縮十進制數(shù)(壓縮型BCD

50、碼)和無符號的非壓縮十進制數(shù)(非壓縮型BCD碼)。除壓縮十進制數(shù)只有加/減運算外,其余三種數(shù)據(jù)類型都可以進行加、減、乘、除運算。 二進制的無符號數(shù)和帶符號數(shù)的長度都可以是8位或16位,但應注意它們所能表示的數(shù)的范圍是不同的。若是帶符號數(shù),則用補碼表示。 第4章 80 x86指令系統(tǒng) 十進制數(shù)以字節(jié)的形式存儲。對壓縮十進制數(shù),每個字節(jié)存兩位數(shù),即兩位BCD碼,因而對于一個字節(jié)來說,壓縮十進制數(shù)的范圍是099。而對非壓縮的十進制數(shù),每個字節(jié)存一位數(shù),即由字節(jié)的低4位決定存放的數(shù)字,對于高4位,在進行乘/除運算時必須全為0,加/減運算時可以是任何值。 8086/8088提供的各種調整操作指令可以方便

51、地進行壓縮或非壓縮十進制數(shù)的算術運算。 第4章 80 x86指令系統(tǒng) 2) 算術運算指令對標志位的影響 8086/8088的算術運算指令將運算結果的某些特性傳送到6個狀態(tài)標志位上去,這些標志位中的絕大多數(shù)可由跟在算術運算指令后的條件轉移指令進行測試,以改變程序的流程。因此掌握指令執(zhí)行結果對標志位的影響,對編程有著重要的作用。關于6個狀態(tài)標志位的含義已在第3章中做了介紹,這里不再重復。 算術運算類指令共有20條,包括加、減、乘、除運算,符號擴展和十進制調整指令,除符號擴展指令(CBW,CWD)外,其余指令都影響標志位。 第4章 80 x86指令系統(tǒng) 3) 二進制數(shù)運算指令 二進制數(shù)運算指令包括加

52、法、減法、乘法、除法和符號擴展指令等五種。 (1) 加法指令。加法指令包括不帶進位加法指令、帶進位加法指令和加1指令。 加法指令ADD (ADDition)。指令格式及操作: ADD dst,src ;(dst)(dst)+(src) ADD指令將目的操作數(shù)與源操作數(shù)相加,并將結果送給目的操作數(shù)。加法指令將影響狀態(tài)標志位。 第4章 80 x86指令系統(tǒng) 目的操作數(shù)可以是寄存器或存儲器,源操作數(shù)可以是寄存器、存儲器或立即數(shù)。但是源操作數(shù)和目的操作數(shù)不能同時為存儲器。另外,不能對段寄存器進行加法運算(段寄存器也不能參加、減、乘、除運算)。加法指令的操作對象可以是8位數(shù)(字節(jié)),也可以是16位數(shù)(字

53、)。例如:ADD CL,10ADD DX,SIADD AX,MEMADD DATABX,AL ADD ALPHADI,30H;變量ALPHA的類型決定指令完成字節(jié)加還是字加 第4章 80 x86指令系統(tǒng) 相加的數(shù)據(jù)類型可以根據(jù)編程者的意圖,規(guī)定為帶符號數(shù)或無符號數(shù)。對于無符號數(shù),若相加結果超出了8位或16位無符號數(shù)所能表示的范圍,則進位標志位CF被置1;對于帶符號數(shù),如果相加結果超出了8位或16位補碼所能表示的范圍(128+127或32 768+32 767),則溢出標志位OF被置1,結果溢出。 第4章 80 x86指令系統(tǒng) 帶進位加法指令ADC (ADdition with Carry)。指

54、令格式及操作: ADC dst,src ;(dst)(dst)+(src)+(CF) ADC指令是將目的操作數(shù)與源操作數(shù)相加,再加上進位標志CF的內容,然后將結果送給目的操作數(shù)。與ADD指令一樣,ADC指令的運算結果也將修改狀態(tài)標志位。目的操作數(shù)及源操作數(shù)的類型與ADD指令相同,而且ADC指令同樣也可以進行字節(jié)操作或字操作。 帶進位加法指令主要用于多字節(jié)數(shù)據(jù)的加法運算。如果低字節(jié)相加時產(chǎn)生進位,則在下一次高字節(jié)相加時將這個進位加進去。 第4章 80 x86指令系統(tǒng) 例 4 . 3 計 算 兩 個 多 字 節(jié) 十 六 進 制 數(shù) 之 和 :3B74AC60F8H+20D59E36C1H=? 式中

55、被加數(shù)和加數(shù)均有5個字節(jié),可以編一個循環(huán)程序實現(xiàn)以上運算。假設已將被加數(shù)和加數(shù)分別存入從DATA1和DATA2開始的兩個內存區(qū),且均為低位字節(jié)在前,高位字節(jié)在后,如圖4.15所示。要求相加所得結果仍存回以DATA1為首址的內存區(qū)。 第4章 80 x86指令系統(tǒng) 程序流程圖如圖4.16所示。程序如下:MOV CX,5;設置循環(huán)次數(shù)MOV SI,0 ;置位移量初值CLC ;清進位CFLOOPER:MOV AL,DATA2SI;取一個加數(shù)ADC DATA1SI,AL;和一個被加數(shù)相加INC SI ;位移量加1DEC CX ;循環(huán)次數(shù)減1 JNZ LOOPER ;加完否,若沒完,轉LOOPER,繼續(xù)相

56、加HLT ;程序暫停 第4章 80 x86指令系統(tǒng) F8H60HACH存儲器DATA174H3BHC1H36H9EHD5H20HDATA2被加數(shù)加數(shù)圖4.15 例4.3中被加數(shù)和加數(shù)在內存中的存放情況 第4章 80 x86指令系統(tǒng) 開始初始化: 置循環(huán)次數(shù)清SI, 清進位標志CF取一個字節(jié)加數(shù)與一個被加數(shù)相加并送回內存區(qū)SI加1循環(huán)次數(shù)減1循環(huán)次數(shù)到結束YN 圖4.16 例4.3的程序流程圖 第4章 80 x86指令系統(tǒng) 加1指令INC (INCrement by 1)。指令格式及操作: INC dst ;(dst)(dst)+1 INC指令將目的操作數(shù)加1,并將結果送回目的操作數(shù)。指令將影響

57、狀態(tài)標志位,如SF、ZF、AF、PF和OF,但對進位標志CF沒有影響。 INC指令中目的操作數(shù)可以是寄存器或存儲器,但不能是立即數(shù)和段寄存器。其類型為字節(jié)操作或字操作均可。例如: 第4章 80 x86指令系統(tǒng) INC DLINC SIINC BYTE PTRBXSI INC WORD PTRDI 指令中的BYTE PTR或WORD PTR分別指定隨后的存儲器操作數(shù)的類型是字節(jié)或字。 INC指令常常用于在循環(huán)程序中修改地址。 第4章 80 x86指令系統(tǒng) (2) 減法指令。減法指令包括不帶借位減法指令、帶借位減法指令、減1指令、求補指令和比較指令。 減法指令SUB (SUBtraction)。指

58、令格式及操作: SUB dst,src ;(dst)(dst) (src) SUB指令將目的操作數(shù)減源操作數(shù),結果送回目的操作數(shù)。指令對狀態(tài)標志位有影響。 第4章 80 x86指令系統(tǒng) 操作數(shù)的類型與加法指令一樣,即目的操作數(shù)可以是寄存器或存儲器,源操作數(shù)可以是立即數(shù)、寄存器或存儲器,但不允許兩個存儲器操作數(shù)相減;既可以字節(jié)相減,也可以字相減。例如: SUB AL,37H SUB DX,BX SUB CX,VARE1 SUB ARRAYDI,AX SUB BETABXDI,512;BETA為字型變量,若為字節(jié)型變量,則源操作數(shù)超出范圍 第4章 80 x86指令系統(tǒng) 減法數(shù)據(jù)的類型也可以根據(jù)程序

59、員的要求約定為帶符號數(shù)或無符號數(shù)。當無符號數(shù)的較小數(shù)減較大數(shù)時,因不夠減而產(chǎn)生借位,此時進位標志CF置1。當帶符號數(shù)的較小數(shù)減較大數(shù)時,將得到負的結果,則符號標志SF置1。帶符號數(shù)相減如果結果溢出,則OF置1。 第4章 80 x86指令系統(tǒng) 帶借位減法指令SBB (SuBtraction with Borrow)。指令格式及操作:SBB dst,src ;(dst)(dst)(src)(CF) SBB指令是將目的操作數(shù)減源操作數(shù),然后再減進位標志CF,并將結果送回目的操作數(shù)。SBB指令對標志位的影響與SUB指令相同。 第4章 80 x86指令系統(tǒng) 目的操作數(shù)及源操作數(shù)的類型也與SUB指令相同。

60、8位或16位數(shù)運算均可。例如:SBB BX,1000SBB CX,DXSBB AL,DATA1SISBB DISPBP,BLSBB BYTE PTR SI+6,97 帶借位減指令主要用于多字節(jié)的減法。 第4章 80 x86指令系統(tǒng) 減1指令DEC (DECrement by 1)。指令格式及操作:DEC dst ;(dst)(dst) 1 DEC指令將目的操作數(shù)減1,結果送回目的操作數(shù)。指令對狀態(tài)標志位SF、ZF、AF、PF和OF有影響,但不影響進位標志CF。 操作數(shù)與INC一樣,可以是寄存器或存儲器(立即數(shù)和段寄存器不可)。其類型是字節(jié)操作或字操作均可。例如: DEC BLDEC CXDEC

61、 BYTE PTRBX DEC WORD PTRBPDI 第4章 80 x86指令系統(tǒng) 在循環(huán)程序中常常利用DEC指令來修改循環(huán)次數(shù)。例如: MOV AX,0FFFFHCYC:DEC AX JNZ CYC HLT 以上程序段中DEC AX指令重復執(zhí)行65535(0FFFFH)次。此程序實際上是一段延時程序。 第4章 80 x86指令系統(tǒng) 求補指令NEG(NEGate)。指令格式及操作: NEG dst ;(dst)0 (dst) NEG指令的操作是用“0”減去目的操作數(shù),結果送回原來的目的操作數(shù)。求補指令對狀態(tài)標志位有影響。 操作數(shù)可以是寄存器或存儲器。可以對8位數(shù)或16位數(shù)求補。例如:NEG

62、 BLNEG AXNEG BYTE PTRBPSINEG WORD PTRDI+20 第4章 80 x86指令系統(tǒng) 例4.4 內存數(shù)據(jù)段存放了200個帶符號數(shù),首地址為TAB1,要求將各數(shù)取絕對值后存入以TAB2為首址的內存區(qū)。 由于200個帶符號數(shù)中可能既有正數(shù),又有負數(shù),因此先要判斷正負。如為正數(shù),可以原封不動地傳送到另一內存區(qū);如為負數(shù),則需先求補即可得到負數(shù)的絕對值,然后再傳送。程序如下: LEA SI,TAB1;(SI)源地址指針LEA DI,TAB2 ;(DI)目標地址指針 MOV CX,200 ;(CX)循環(huán)次數(shù) 第4章 80 x86指令系統(tǒng) CHECK: MOVAL,SI ;取

63、一個帶符號數(shù)到ALORAL,AL ;AL內容不變,但使之影響標志JNSNEXT ;若(SF)=0,則轉NEXTNEG AL ;否則求補NEXT:MOV DI,AL ;傳送到目標地址INC SI ;源地址加1INC DI ;目標地址加1DEC CX ;循環(huán)次數(shù)減1JNZ CHECK ;如不等于零,則轉CHECKHLT ;停止 第4章 80 x86指令系統(tǒng) 比較指令CMP (CoMPare)。指令格式及操作:CMP dst,src ;(dst) (src) CMP指令將目的操作數(shù)減源操作數(shù),但結果不送回目的操作數(shù)。因此,執(zhí)行比較指令以后,被比較的兩個操作數(shù)內容均保持不變,而比較結果反映在狀態(tài)標志位

64、上,這是比較指令與減法指令SUB的區(qū)別所在。 第4章 80 x86指令系統(tǒng) CMP指令的目的操作數(shù)可以是寄存器或存儲器,源操作數(shù)可以是立即數(shù)、寄存器或存儲器,但不能同時為存儲器。可以進行字節(jié)比較,也可以是字比較。例如:CMP AL,0AH ;寄存器與立即數(shù)比較CMP CX,DI ;寄存器與寄存器比較CMP AX,AREA1 ;寄存器與存儲器比較CMP BX+5,SI ;存儲器與寄存器比較 比較指令的執(zhí)行結果將影響狀態(tài)標志位。例如,若兩個被比較的內容相等,則(ZF)=1。又如,假設被比較的兩個無符號數(shù)中,前者小于后者(即不夠減),則(CF)=1,等等。比較指令常常與條件轉移指令結合起來使用,完成

65、各種條件判斷和相應的程序轉移。 第4章 80 x86指令系統(tǒng) 例4.5 在數(shù)據(jù)段從MYDATA開始的存儲單元中分別存放了兩個8位無符號數(shù),試比較它們的大小,并將大者傳送到MAX單元。程序如下:LEABX,MYDATA;MYDATA偏移地址送BXMOVAL,BX ;第一個無符號數(shù)送ALINCBX ;BX指向第二個無符號數(shù)CMP AL,BX ;兩個數(shù)比較JNC DONE ;如CF=0,則轉DONEMOV AL,BX ;否則,第二個無符號數(shù)送ALDONE:MOV MAX,AL ;較大的無符號數(shù)送MAX單元 HLT ;停止 第4章 80 x86指令系統(tǒng) (3) 乘法指令。8086/8088指令系統(tǒng)中有

66、兩條乘法指令,可以實現(xiàn)無符號數(shù)的乘法和帶符號數(shù)的乘法,它們都只有一個源操作數(shù),而目的操作數(shù)是隱含的。這兩條指令都可以實現(xiàn)字節(jié)或字的乘法運算。進行乘法運算時,如果兩個8位數(shù)相乘,那么其乘積最多為16位;如果兩個16位數(shù)相乘,可得到32位的乘積。 需要指出的是,8086/8088 CPU在執(zhí)行乘法指令時,有一個操作數(shù)總是放在累加器(8位數(shù)放在AL,16位數(shù)放在AX)中。8位數(shù)相乘時,其乘積(16位)存放在AX中;16位數(shù)相乘時,其乘積(32位)存放在DX:AX中,其中高16位存于DX中,低16位存于AX中,如圖4.17所示。 第4章 80 x86指令系統(tǒng) (16位)(16位)AXDX乘積乘數(shù)被乘數(shù)(8位)(8位)AX乘積乘數(shù)被乘數(shù)(16位)(32位)操作數(shù)AX操作數(shù)AL圖4.17 乘法運算的操作數(shù)及運算結果 第4章 80 x86指令系統(tǒng) 無符號數(shù)乘法指令MUL (MULtiplication unsigned)。指令格式及操作: MUL src ;(AX)(AL) (src) (字節(jié)乘法) ;(DX:AX)(AX) (src)(字乘法) MUL指令對狀態(tài)標志位CF和OF有影響,SF、ZF、

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!