




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統13.13.1操作數尋址方式操作數尋址方式3.23.2指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統2微機工作過程中其內部信息有兩類:微機工作過程中其內部信息有兩類: 一類是控制信息(指令);一類是控制信息(指令); 一類是被加工處理的信息(數據)。一類是被加工處理的信息(數據)。 指令指令:微機中的控制信息就是使計算機進行某種微機中的控制信息就是使計算機進行某種操作的命令,這些命令就稱為指令。操作的命令,這些命令就稱為指令。 指令系統指令系統:一臺計算機所能執行的
2、全部指令的集合稱一臺計算機所能執行的全部指令的集合稱為指令系統。不同的計算機其指令系統是不同的。為指令系統。不同的計算機其指令系統是不同的。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統3 匯編語言指令匯編語言指令或或符號指令符號指令:用字母和其它一些符:用字母和其它一些符號組成的號組成的“助記符助記符”與與操作數操作數等表示的指令稱為匯編等表示的指令稱為匯編語言指令或符號指令。語言指令或符號指令。例如:例如: MOV AX, BX ; AXBX; AXBX 而其二進制代碼(機器代碼)為而其二進制代碼(機器代碼)為89D8H,就是就是1000 1001 110
3、1 1000 B1000 1001 1101 1000 B 不易理解,不易記憶。助記符是不易理解,不易記憶。助記符是MOV。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統43.13.1操作數尋址方式操作數尋址方式3.1.1 8086CPU3.1.1 8086CPU指令格式指令格式 指令由操作碼和操作數兩部分構成。操作碼表明指令要進行什么樣的操作;操作數是參加本指令操作的數據。操作數的表現形式比較復雜,可以是參與操作的數值,也可以是參與操作的數值的“地址”,需要通過尋址方式來體現。操作碼操作碼操作數操作數第第3 3章章 8086/8088CPU8086/8088
4、CPU指令系統指令系統53.1.1 8086/80883.1.1 8086/8088指令格式指令格式8086/80888086/8088機器指令格式通常1-6個字節組成。典型的指令格式由2個字節組成,如下圖所示。操作碼MOD REGR/M第一字節操作碼字段表明該指令要完成什么操作。(W/D/S)第二字節表明參加操作數據的地址,用來表明參入本次操作的數據及其類型,雙操作數不能同為存儲器操作數。其中:MOD段(2Bit):表示操作數的類型;11寄存器;0 x 存儲器REG段(3Bit):表示其中一個操作數為寄存器操作數,用三位編碼表示,如000表示AXR/M段(3Bit):表示另外一個操作數為寄存
5、器或存儲器操作數4.14.1操作數尋址方式操作數尋址方式WD第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統6 有時用8位不夠,因此在指令的第二個字節中還可能占3位。除此以外的其他字節用來表示操作數。 W(字位):本指令是對字(W=1)還是對字節(W=0)操作。 D(方向位):表示參加的寄存器是作為目的操作數寄存器(D=1 )還是作為源操作數寄存器(D=0)。 S(符號擴展位):如果立即數為8位,但要求擴展成16位,則S=1;否則S=0。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統7示例:標準機器代碼mov ax,BP+0 ;
6、機器代碼是;機器代碼是 8B 46 00前一個字節前一個字節8B是操作碼(含是操作碼(含w1表示字操作)表示字操作) 中間一個字節中間一個字節46(01 000 110)是)是 “mod reg r/m”字節,見書上字節,見書上52頁。頁。 reg000表示目的操作數為表示目的操作數為AX mod01表示對存儲器操作表示對存儲器操作 r/m110表示源操作數為表示源操作數為BP+D8 最后一個字節就是最后一個字節就是8位位移量位位移量D8001/2字節0/1字節操作碼mod reg r/m第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統8介紹操作數之前,首先要清
7、楚計算機中的數據可以存放在哪里呢?介紹操作數之前,首先要清楚計算機中的數據可以存放在哪里呢?在計算機運行過程中大量的數據存儲器中(MEM),這部分數據處理時需要給出操作數所在存儲單元的地址;少量數據可以放在寄存器中,使用時也需要給出其地址;接口中也有寄存器,對其訪問需給出其端口地址( 后面介紹)。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統93.1.2 3.1.2 操作數的類型操作數的類型1.1.存儲器操作數存儲器操作數存放在代碼段中的數據是指令格式編碼的一部分,在取指令是就隨指令被取到CPU,直接可以參加指令操作,通常稱為立即數。存儲器分為代碼段、數據段、
8、附加段和堆棧段,存放在數據段、附加段和堆棧段中的數據即存儲器操作數,其地址表示比較復雜,將在尋址方式中做詳細介紹;存放在外設端口中的數據稱為端口操作數,CPU使用專用的IN、OUT指令來對端口進行訪問。2.2.立即操作數立即操作數3.3.寄存器操作數寄存器操作數存放在寄存器中的數據稱為寄存器操作數。4.4.端口操作數端口操作數4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統103.1.3 3.1.3 操作數尋址方式操作數尋址方式 所謂操作數的尋址方式,是在指令格式中怎樣有效的表示出操所謂操作數的尋址方式,是在指令格式中怎樣
9、有效的表示出操作數的存放位置,作數的存放位置,CPUCPU在執行該指令時,按照指令格式中的表示找在執行該指令時,按照指令格式中的表示找到并對數據進行存取。到并對數據進行存取。1.1.立即尋址(立即尋址(Immediate AddressingImmediate Addressing) 立即尋址中的操作數作為指令的一部分存放在代碼段中,在取指階段數據隨指令一起被取到CPU,這種數據在指令格式中的直接表現為常數。如:MOV AL,34H代碼段代碼段1000H:0000H1000H:0000H1000H:0100H1000H:0100H操作碼操作碼34H34HAHAL注:立即數可理解為常數,在指令中
10、只能作為源操作數4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統114.1.4 4.1.4 操作數尋址方式操作數尋址方式2.2.寄存器尋址(寄存器尋址(Register AddressingRegister Addressing)寄存器尋址是指操作數存放在規定的寄存器中。寄存器尋址是指操作數存放在規定的寄存器中。例如:MOV AX,BXAHAL1616位寄存器:位寄存器:AXAX、BXBX、CXCX、DXDX、 SPSP、BPBP、DIDI、SISI;8 8位寄存器:位寄存器:AHAH、BHBH、CHCH、DHDH、 AL
11、AL、BLBL、CLCL、DLDL;1616位段寄存器:位段寄存器:CSCS、DSDS、ESES、SSSS。SSSS、DSDS、ESES既可以作為源操作數,也可既可以作為源操作數,也可以作為目的操作數,但不能互為目的操以作為目的操作數,但不能互為目的操作數。作為目的操作數時,源操作數不作數。作為目的操作數時,源操作數不能是立即數,能是立即數,CSCS只能作為源操作數。只能作為源操作數。 BHBL4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統124.1.4 4.1.4 操作數尋址方式操作數尋址方式 存儲器操作數的尋址方式中
12、,數據都存放于存儲單元中,指令操存儲器操作數的尋址方式中,數據都存放于存儲單元中,指令操作過程中需要作過程中需要BIUBIU通過一個總線周期的訪問,才能獲取操作數。存儲通過一個總線周期的訪問,才能獲取操作數。存儲器操作數的尋址方式是怎么計算出操作數的器操作數的尋址方式是怎么計算出操作數的有效地址有效地址EAEA(Effective Effective AddressAddress)。有效地址)。有效地址EAEA是三個地址量因子一個以上組合,由是三個地址量因子一個以上組合,由CPUCPU執行執行單元單元EUEU計算出來。計算出來。 3.3.存儲器尋址(存儲器尋址(Memory Addressin
13、gMemory Addressing)位移量因子(位移量因子(DisplacementDisplacement):位移量是指令中直接給出的一個):位移量是指令中直接給出的一個8/168/16位數;位數;基址量因子(基址量因子(BaseBase):由基址寄存器):由基址寄存器BXBX或或BPBP提供的內容;提供的內容;變址量因子(變址量因子(IndexIndex):由變址寄存器):由變址寄存器SISI或或DIDI提供的內容。提供的內容。注:注:3 3個地址量因子組合有個地址量因子組合有7 7種方式。根據組合后地址量因子的特種方式。根據組合后地址量因子的特點,最終合并成點,最終合并成5 5種尋址方
14、式種尋址方式。4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統134.1.4 4.1.4 操作數尋址方式操作數尋址方式存儲器尋址之直接尋址存儲器尋址之直接尋址(Direct Addressing)(Direct Addressing) 在指令格式中直接給出操作數的有效地址,指令執行時CPU根據給出的有效地址,在相應存儲單元存取數據。 有效地址EA=位移量(只取位移量因子) MOV AX,2000H 操作如圖所示:數據段數據段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12H
15、AHAL注:存儲器操作數都是給出其首地址雙操作數指令中,兩個操作數不能都是存儲器操作數存儲器操作數無超越前綴時,默認段地址為DS;有BP參入尋址時默認為SS4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統14存儲器尋址之存儲器尋址之寄存器間接尋址(寄存器間接尋址(Register Indirect Addressing) 4.1.4 4.1.4 操作數尋址方式操作數尋址方式有效地址EA存放在基址寄存器(BX或BP)或變址寄存器(DI或SI)中 EA=(BX/BP)或(SI/DI)取一個基地址或變地址因子MOV AX,BX
16、操作如圖所示 數據段數據段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12HAHAL20H00HBX+注:BX、SI和DI訪問默認為數據段BP訪問默認為堆棧段4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統154.1.4 4.1.4 操作數尋址方式操作數尋址方式存儲器尋址之寄存器相對尋址(存儲器尋址之寄存器相對尋址(Register Relative AddressingRegister Relative Addressing) 操作數有效地址EA 是8/16位的位移量(D
17、ISP8/16)與基址(變址)寄存器BX、BP、DI、SI之和生成。 EA=(BX或BP或SI或DI)+DISP8/16 MOV AX,BX+10H 操作如圖所示數據段數據段3000H:0000H3000H:0000H3000H:2010H3000H:2010H34H12HAHAL20H00HBX+0100H0100H注:BX、SI和DI訪問默認為數據段BP訪問默認為堆棧段有效地址由兩個因子構成4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統164.1.4 4.1.4 操作數尋址方式操作數尋址方式存儲器尋址之基址加變址尋址
18、(存儲器尋址之基址加變址尋址(Base-plus-Index AddressingBase-plus-Index Addressing) 有效地址EA是一個基址量與一個變址量之和構成。EA=(BX/BP)+(SI/DI)MOV AX,BX+SI 操作如圖所示 數據段數據段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+注:基址因子BP訪問默認為堆棧段不能同時取兩個基址因子;也不能同時去兩個變址因子4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU
19、指令系統指令系統174.1.4 4.1.4 操作數尋址方式操作數尋址方式存儲器尋址之相對基址加變址尋址(存儲器尋址之相對基址加變址尋址(Base Relative -plus-Index AddressingBase Relative -plus-Index Addressing) 有效地址是一個8/16位移量和一個基址與變址之和構成 EA=(BX/BP)+(SI/DI)+ DISP8/16 MOV AX,BX+SI+10H 操作如圖所示 數據段數據段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+
20、3000H:3000H3000H:3000H+0010H0010H注:基址因子BP訪問默認為堆棧段不能同時取兩個基址因子;也不能同時去兩個變址因子4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統184.1.4 4.1.4 操作數尋址方式操作數尋址方式存儲器操作數和寄存器操作數尋址方式,怎樣在指令格式中體現呢?前節介紹的指令格式中的MOD段,MOD=11時表示兩個操作數都為寄存器操作數;MOD11時表示R/M段所表示的操作數為存儲器操作數,具體如下表所示。MODMODR/MR/M存儲器尋址存儲器尋址REGREG尋址尋址邏輯地
21、址的計算公式邏輯地址的計算公式W=0W=0W=1W=1mod=00mod=00mod=01mod=01mod=10mod=10mod=11mod=11000000001001010010011011100100101101110110111111DS:BX+SIDS:BX+SIDS:BX+DIDS:BX+DISS:BP+SISS:BP+SISS:BP+DISS:BP+DIDS:SIDS:SIDS:DIDS:DIDS:direct16DS:direct16DS:BXDS:BXDS:BX+SI+disp8DS:BX+SI+disp8DS:BX+DI+disp8DS:BX+DI+disp8SS:BP
22、+SI+disp8SS:BP+SI+disp8SS:BP+DI+disp8SS:BP+DI+disp8DS:SI+disp8DS:SI+disp8DS:DI+disp8DS:DI+disp8SS:BP+disp8SS:BP+disp8DS:BX+disp8DS:BX+disp8DS:BX+SI+disp16DS:BX+SI+disp16DS:BX+DI+disp16DS:BX+DI+disp16SS:BP+SI+disp16SS:BP+SI+disp16SS:BP+DI+disp16SS:BP+DI+disp16DS:SI+disp16DS:SI+disp16DS:DI+disp16DS:DI
23、+disp16SS:BP+disp16SS:BP+disp16DS:BX+disp16DS:BX+disp16ALALCLCLDLDLBLBLAHAHCHCHDHDHBHBHAXAXCXCXDXDXBXBXSPSPBPBPSISIDIDIR/M字段為寄存器操作數R/M字段為存儲器操作數直接尋址寄存器間接尋址基址+變址尋址相對尋址相對的基址+變址尋址沒有位移量8位位移量16位位移量4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統194.1.4 4.1.4 操作數尋址方式操作數尋址方式4 4端口尋址(端口尋址(Port Add
24、ressingPort Addressing) 80X86系列CPU在訪問外設時使用10根地址線A9-A0,其實際訪問空間為210=1K。根據通常書寫習慣當高2為A9A8=00時,直接書寫低8位,可直接出現在指令格式中即端口的直接尋址;當A9A800時,要按照16為的數據書寫,不能直接出現在指令格式中,要預先送到DX寄存器中,即端口的間接尋址。A9A8A7A6A5A4A3A2A1A0 0 0 X X X X X X X X 0 1 X X X X X X X X 1 0 X X X X X X X X 1 1 X X X X X X X XIN AL,20HOUT 20H,AL20H為端口地址
25、MOV DX,200HIN AL,DXOUT DX,AL200H為端口地址4.14.1操作數尋址方式操作數尋址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統20 微處理器指令分類的方法有很多種。可以按其指令長短、尋址方式以及指令功能等進行分類。 按指令長短可以分為單字節指令、二字節指令及多字節指令。 按尋址方式分類,有訪問存儲器指令,訪問寄存器指令和訪問輸入輸出端口指令等。 按功能分類,有數據傳送類指令、數據處理類指令、程序控制類指令、CPU控制類指令以及為提高機器求解專門問題的效率或簡化程序而設的其他指令等,目前微型機多采用后一種分類方法。4.2 4.2
26、 指令系統指令系統指令的分類指令的分類:第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統214.2 4.2 指令系統指令系統8086/8088的指令系統,按照其功能可以分為以下六個功能組: 數據傳送(Data Transfer) 算術運算(Arithmetic) 邏輯運算(Logic) 串操作(String Manipulation) 程序控制(Program Control) 處理器控制(Processor Control) 不同指令其操作數的數量不同,主要有3種格式:(1)無操作數指令;(2)單操作數指令;(3)雙操作數指令。 在學習指令過程中要注意在學習指
27、令過程中要注意3 3個方面事項個方面事項: :(1)(1)指令隱含功能;指令隱含功能;(2)(2)指令特殊用途;指令特殊用途;(3)(3)指令對標志位影響。指令對標志位影響。 第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統224.2.1 4.2.1 數據傳送指令數據傳送指令4.2 4.2 指令系統指令系統傳送指令是將數據送寄存器或者存儲單元中;在寄存器之間、寄存器與存儲器之間進行數據傳送。其傳遞遵循如圖所示規則:立即數立即數DS、ES、SSCS通用寄存器通用寄存器存儲器存儲器立即數送寄存器立即數送寄存器立即數送存儲器立即數送存儲器立即數只能立即數只能做源操作數
28、做源操作數寄存器間可以互寄存器間可以互為目的操作數為目的操作數寄存器與存儲其可以寄存器與存儲其可以互為目的操作數互為目的操作數DS、ES、SS不能互為目的操作數CSCS只能做源操作數只能做源操作數注:圖中沒有直接連接箭頭指向的,可以用過轉跳點過度,如圖中沒有直接連接箭頭指向的,可以用過轉跳點過度,如MOV DSMOV DS,1234H1234H可以改為:可以改為: MOV AXMOV AX,1234H1234H和和MOV DSMOV DS,AXAX來實現。來實現。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統234.2.1 4.2.1 數據傳送指令數據傳送指令
29、1. 1. 通用數據傳送指令通用數據傳送指令 (1)傳送指令MOV:MOV DEST,SRC 功能:將源操作數送入指定目的操作數該類指令不影響狀態標志位 MOV AX,BX+SI+10H 操作如圖所示 數據段數據段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+3000H:3000H3000H:3000H+0010H0010H注注4.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統24使用MOV指令應注意以下幾點: 立即數無地址,故只能作為
30、源操作數,不能作為目的操作數。 CS只能作為源操作數,不能作為目的操作數。 CPU中的寄存器除IP外都可通過MOV指令訪問。 立即數不能直接傳送到段寄存器,但可通過其他寄存器或堆棧傳送。 例如: MOV AX,1000 MOV DS,AX MOV ES,AX第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統25 段寄存器之間不能直接傳送。 兩個內存單元之間不能直接傳送。因為8086的任何一條指令最多只能有一個內存操作數。以下這些指令是錯誤的:以下這些指令是錯誤的: MOV 52,AH ;立即數不能作為目的操作數 MOV CS,AX ;CS不能作為目的操作數 MOV
31、 DI,SI ;內存單元之間不能直接傳送 MOV 1000,SI ;同上 MOV IP,BX ;IP不能作為目的操作數 MOV DX,BL ;數據類型不對第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統264.2.1 4.2.1 數據傳送指令數據傳送指令1. 1. 通用數據傳送指令通用數據傳送指令 (2)交換指令XCHG:XCHG DEST,SRC 功能:將源操作數、目的操作數內容互換兩個操作數不能同為存儲器操作數。MOV AX,BX操作如圖所示 BHBLBX注注AHALAX(3)查表指令XLAT:XLAT 功能:ALDS:BX+AL。把BX的內容作為數據段中數
32、據表的首地址,AL內容為查表的項數,將其對應的字節單元的值再送給AL 3000H:0000H3000H:0000H3000H:2000H3000H:2000H3000H:2005H3000H:2005H數據段數據段+2000BX表首址表首址查表項查表項+AL 05HAL 05H34H34H4.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統27 指令通過AL或BX寄存器進行表格查找,其功能是從轉換表中查找出一個字節的內容,用其取代AL寄存器中的內容。 轉換表最長為256個字節,是由用戶設計的。執行查表指令前,BX應指向轉換表的起點。
33、操作數是隱含的,操作數地址為基址+索引值。 BX為表格起點,AL為索引值。從BX+AL中取一個字節送給AL。例如:AL0FH,BX0040H,DS2000H,執行指令 XLAT 之后,將存儲單元2004FH的內容裝入到AL中。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統28 例如,數字09對應的格雷碼為:18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H。 將轉換表列于表21中。 如果要查一位十進制數6的格雷碼,再輸出到60H端口,則應執行以下幾條指令:MOV BX,OFFSET TABLE ;取TABLE的偏移地址 送BXMOV
34、 AL,6XLAT ;AL得到表中某值(對應的格雷碼)OUT 60H,AL第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統294.2.1 4.2.1 數據傳送指令數據傳送指令1. 1. 通用數據傳送指令通用數據傳送指令 (4)壓棧指令PUSH:PUSH SRC 功能:SPSP-2,SPSRC,將棧頂指針上移兩個字節后將源操作數壓入堆棧 PUSH AX執行如圖所示 SS:0000H12H34HAXSS:0102HSS:0100H01H02HSP01H00HSPSPSP堆棧堆棧12H34H(5)彈棧指令POP:POP DEST 功能: DESTSP、SPSP+2,將
35、棧頂內容彈到目的操作數中,然后堆棧的棧頂指針下移兩個字節 POP AX執行如圖所示 SS:0000HXXHXXHAXSS:0102HSS:0100H01H00HSP01H02HSPSPSP堆棧堆棧12H34H12H34HAX4.2 4.2 指令系統指令系統堆棧操作指令源操作數必須是字操作數,不能是立即數堆棧操作指令源操作數必須是字操作數,不能是立即數第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統30例如:執行指令 PUSH AX 后堆棧內容與SP的值如圖所示。若執行前: AX1256H SS = 2F00H SP1000H則指令執行后; SP0FFEH SS2
36、F00H AX1256H 內存2FFFFH單元壓入12H,2FFFEH單元中壓人56H。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統31堆棧遵從“后進先出”的原則,因此在保存寄存器和恢復寄存器的內容時要按照相反的順序執行一組壓入和彈出指令。例如在子程序的開頭保護寄存器時順序為: PUSH AX PUSH BX PUSH CX PUSH DX則子程序返回前,應按如下順序恢復寄存器值: POP DX POP CX POP BX POP AX第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統322. 2. 地址傳送指令地址傳送指令 4
37、.2.1 4.2.1 數據傳送指令數據傳送指令(1)(1)取取EAEA指令指令LEALEA:LEA REGLEA REG,MEMMEM 功能:將源操作數的有效地址送功能:將源操作數的有效地址送指定寄存器指定寄存器 LEA BX,DI指令執行如圖所示 :數據段數據段4000H:0000H0100HDIXXXXHBX0100HBX4000H:0100HEA=0100H55H66H(2)(2)取地址指令取地址指令LDSLDS:LDS REGLDS REG,MEMMEM 功能:將MEM所對應的雙字存儲單元數據的高字送入DS,低字送入指令指定的寄存器 。MEM為雙字數據為雙字數據。LDS BX,DI指令
38、執行如圖所示 :數據段數據段4000H:0000H0100HDIXXXXHBXXXXXHDS4000H:0100H55H66H33H44H雙字雙字6655HBX4433HDS(3)LES(3)LES的原理與的原理與LDSLDS相似相似4.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統33例如1:BX0400H,SI003CH 執行指令 LEA BX,BXSI0F62H之后,BX139EH,它是BX,SI和指定的偏移量之和。例如2:當DS1000H,執行指令 LDS SI,0010H之后,SI0180H, DS2000H。800100
39、20SIMDS10010H10011H10012H10013H例如3: DS1000H,BX080AH,存儲單元1080AH的字是05A2H,存儲單元1080CH中的字是4000H。執行指令 LES DI, BX 之后,DI05A2H, ES4000H。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統344.2.1 4.2.1 數據傳送指令數據傳送指令3. 3. 標志傳送指令標志傳送指令 (1)LAHF(1)LAHF指令:標志寄存器低指令:標志寄存器低8 8位送位送AH AH ,其操作如下:,其操作如下:OF DF IF TF SF ZFAFPFCFFRAHOF
40、 DF IF TF SF ZFAFPFCFFRAH(2)SAHF(2)SAHF指令:指令: AHAH送標志寄存器低送標志寄存器低8 8位位 ,其操作如下:,其操作如下:(3)(3)標志寄存器內容壓棧指令標志寄存器內容壓棧指令PUSHFPUSHF:將標志寄存器內容壓入棧頂:將標志寄存器內容壓入棧頂 (4)(4)棧頂內容送標志寄存器指令棧頂內容送標志寄存器指令POPFPOPF:將棧頂內容送標志寄存器:將棧頂內容送標志寄存器 4.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統35X表示不確定值例如:假定CFPF1,ZFSFAF0,執行指令
41、 LAHF之后,AH中內容為00X0X1X1。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統364 4、輸入指令、輸入指令 (1) IN AL,DX 或 IN AX,DX 該指令中DX寄存器的內容就是I/O地址,將此端口地址中的8位或16位數據裝入到AL或AX寄存器中。此指令允許訪問的口地址為0000HFFFFH。 例如:DX1234H,端口1234H在I/O緩沖器中的低字節是23H,端口1234H在I/O緩沖器的高字節是F4H。執行指令 IN AX,DX之后,AL23H,AHF4H。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令
42、系統37 (2) IN AL, port 或 IN AX, port port為8位端口地址,該指令由指定的I/O端口中將8位或16位數據傳送到AL(8位傳送)或AX(16位傳送)寄存器中。 例如:端口60H在I/O緩沖器中內容為43H,執行指令 IN AL,60H之后,AL43H。 此指令允許訪問的口地址范圍是00FFH之間。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統386 6、輸出指令、輸出指令與輸入指令相對應的輸出指令也有兩種。 (1) OUT DX,AL 或 OUT DX,AX 將AL或AX中的內容輸出到由DX指定的I/O端口。端口地址范圍0FFF
43、FH。例如: MOV DX,0300H MOV DX,02FEH OUT DX,AL OUT DX,AX (2) OUT port,AL 或 OUT port,AX 將AL或AX中的內容輸出到由port所指定的端口中。port為8位口地址,其地址范圍為0FFH。例如: MOV AL,0FH MOV AX,0F0FH OUT 80H,AL OUT 81H,AX第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統39 8086共有五種算術運算指令,具有很強的算術運算能力。 (1)加法指令:可執行五種類型的加法,包括 ADD、ADC、INC、AAA、DAA。 (2)減法指
44、令:可執行六種類型的減法,包括 SUB、SBB、DEC、AAS、DAS、NEG。 (3)乘法指令:可執行三種類型的乘法,包括 MUL、IMUL、AAM。 (4)除法指令:可執行三種除法操作和兩個符號擴展操作,以實現帶符號的除法,包括 DIV、IDIV、AAD、CBW、CWD。 (5)比較指令:CMP。4.2.2 4.2.2 算術運算類指令算術運算類指令第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統404.2.2 4.2.2 算術運算類指令算術運算類指令4.2 4.2 指令系統指令系統 算術運算參加運算的數據既可以是二進制數據也可以是十進制(BCD碼)。二進制數
45、據可以進行加、減、乘、除運算。十進制數據分為壓縮BCD碼和非壓縮BCD碼,非壓縮BCD碼可以進行加、減、乘、除運算,壓縮BCD碼只能進行加、減運算。要求運算數據與結果相同碼制表示;BCD碼沒有專門指令,先用二進制指令進行運算,將結果進行調整。1. 1. 二進制數據加二進制數據加( (減減) )法指令法指令(1)ADD DEST,SRC實現目的操作數加源操作數,結果存放于目的操作數中 注:結果影響所有標志位 ADD AXADD AX,BXBX執行如圖所示:執行如圖所示: 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=0(A)SUB指令與AD
46、D相似,只是進行減法操作第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統411. 1. 二進制數據加二進制數據加( (減減) )法指令法指令(2)ADC DEST,SRC實現目的操作數加源操作數,再加上CF的內容,結果存放于目的操作數中 注:該指令主要實現多字節數據加法;結果影響所有標志位 ADC AXADC AX,BXBX執行如圖所示:假設執行如圖所示:假設CF=0CF=0 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=04.2.2 4.2.2 算術運算類指令算術運算類指令CF(B)SBB指令與ADC相似
47、,只是進行減法操作(3)INC DEST 該指令實現了操作數在自身基礎上加1 INC BX INC BX 執行如圖所示執行如圖所示BX+ 1BX注:指令不影響注:指令不影響CFCF (C)DEC指令與INC相似,只是進行減法操作4.2 4.2 指令系統指令系統 INC指令和指令和DEC指令都是單操作數指令指令都是單操作數指令 主要用于對計數器和地址指針的調整主要用于對計數器和地址指針的調整第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統42例如: DS=2800H,BX=0280H,SI=001EH, 內存2829EH64H,執行指令 INC BYTE PTR
48、BX+SI之后,存儲單元2829EH的內容為65H。 注意:段寄存器不能用此指令加1, 此指令不改變CF標志,而影響SF、ZF、AF、PF、OF標志位。DEC指令一樣。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統43 ADC指令為實現多字節的加法運算提供了方便。例:有兩個4字節的無符號數相加,這兩個數分別放在2000H和3000H開始的存儲單元中,低位在前,高位在后。運算后,得到的和放在2000H開始的內存單元中。可以用如下程序段實現這種多字節的加法: MOV SI,2000H ;取第一個數的首地址 MOV AX,SI ;將第一個數的低16位取到AX MOV
49、 DI,3000H ;取第二個數的首地址 ADD AX,DI ;兩個數的低16位相加 MOV SI,AX ;低16位相加的結果送到2000H和 2001H單元 MOV AX,SI+2 ;取第一個數的高16位送到AX中 ADC AX,DI+2 ;兩個數的高16位連同CF相加 MOV SI+2,AX ;高16位相加的結果送到 2002H,2003H單元。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統44 設第一個數為10008423H, 第二個數為20007F00H, 那么,上面程序段中,ADD指令執行時,將兩數的低16位8423H和7F00H相加,則和AX032
50、3H,CF1。 當執行ADC指令時,將兩數的高16位1000H和2000H相加,再加上CF的值。所以,在2000H2003H中最后得到的和應該為30010323H。 其中23H在2000H單元中,30H在2003H單元中。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統454.2.2 4.2.2 算術運算類指令算術運算類指令1. 1. 二進制數據加二進制數據加( (減減) )法指令法指令(4)(4)求補指令求補指令 NEGNEG:NEG DESTNEG DEST NEG指令對操作數執行求補運算:用零減去操作數,然后結果返回操作數求補運算也可以表達成:將操作數按位
51、取反后加1,注:結果影響所有標志位 (5)(5)比較指令比較指令CMP CMP :CMP DESTCMP DEST,SRCSRC該指令執行的兩個數相減操作,不送回結果, 只影響標志位。執行比較指令之后,可以根據標志判斷兩個數是否相等、大小關系等4.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統46例:求補運算例:求補運算MOV BX,6780HNEG BX程序段執行后:BX=9880H,CF=1,ZF=0,OF=1,SF=1,PF=0,AF=0 。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統47
52、在比較指令之后,根據ZF標志即可判斷兩者是否相等;若兩者相等,比較后結果為0,ZF1;否則ZF0。若兩者不等,則可利用比較指令之后的標志位的狀態來確定兩者的大小; 兩個數進行比較時,要考慮是作為無符導數進行比較還是作為帶符號數進行比較,因為兩者判斷大小的標志 (即標準) 是不同的。 兩個無符號數比較時,用借位標志CF來判斷:顯然大數減去小數,不會產生借位,CF0;而小數減去大數,就會有借位,CF1。 當兩個帶符號數比較大小時,僅由結果的正或負來確定大小就不夠了。因為在比較時要做減法,而減法的結果有可能溢出。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統48 1
53、若A0,B0 若參與比較的兩數A和B都是正數,則執行CMP指令后,若SF0,AB;反之,AB。 2若A0,B0 預知結果應是AB,且比較之結果應為正數;但若 A112D (70H),B64D (40H) 執行比較ABA(B)112D64D,在機器中的結果是: 結果的最高位為1,SF1,因此若以SF標志來判斷則會得出AB的錯誤結論。 運算結果176127,超出了其表示范圍,即產生了溢出,因而導致了錯誤的結論。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統49 3、若A0,B0 若A64D,B+112D,則顯然AB;且運算結果應為負。但 ABA+ (B)(64)
54、+ (112)在機器中的運行結果為: A64 (補碼為C0H) B112 (補碼為90H) 結果的bit70,SF0。若單獨用SF來判斷,也會得出AB的錯誤結論。 同樣原因,出現這種運算結果也是由于176小于8位帶符號數所表示的最小值128,產生了溢出。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統50 4、若A0,B0 在運算過程中不會產生溢出。可以用SF判斷兩個數的大小。 綜合上述四種情況概括起來,可以得出以下結論: 在沒有溢出情況下,即OF0時,SF0,則AB;SF1,則AB; 在發生溢出情況下,即OF1時,SF1,則AB;SF0,則AB。 所以當兩個帶
55、符號數比較時,要把標志OF與SF結合起來一起考慮。 8088/8086指令系統中分別提供了判斷無符號數比較結果的條件轉移指令以及判斷有符號數比較結果的條件轉移指令。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統51例如: CMP AX,2000H ;將AX的內容和2000H相比較,結果影響標志位。 CMP AL,50H ;將AL中的數和50H比較,結果影響標志位。 CMP AX,BX+DI+100 ;將累加器和兩個存儲單元的數相比,單元地址由BX+DI+100和BX+DI+101指出。 CMP DX,DI ;將DX和DI的內容相比。 比較指令在執行時,會影響標
56、志位AF、CF、OF、PF、SF和ZF。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統524.2.2 4.2.2 算術運算類指令算術運算類指令2. 2. 二進制數據乘法指令二進制數據乘法指令 乘法運算中的目的操作數是隱含的,字節乘法運算隱含在乘法運算中的目的操作數是隱含的,字節乘法運算隱含在ALAL中,運算結果是中,運算結果是1616位的,存放在位的,存放在AXAX中;字乘法運算隱含在中;字乘法運算隱含在AXAX中,中,運算結果是運算結果是3232位的,存放在位的,存放在DXDX(高(高1616位)和位)和AXAX(低(低1616位)中位)中 。(1)無符號數
57、乘法指令:無符號數乘法指令: MUL SRC操作數為字節數據,則實現操作數為字節數據,則實現AL內容內容與與SRC相乘,結果存放于相乘,結果存放于AX中;如中;如果操作數為字數據,則實現果操作數為字數據,則實現AX內容內容與與SRC相乘,結果存放于相乘,結果存放于DX和和AX中。中。 MUL BLMUL BL執行如圖所示 20HAL40HBL00HAX 08H(2)有符號數乘法指令:有符號數乘法指令: IMUL SRC與與MULMUL指令不同的是參入運算的數據指令不同的是參入運算的數據為有符號數據為有符號數據乘法運算對標志位的影響只考慮乘法運算對標志位的影響只考慮OFOF、CFCF位,既不代表
58、進位也不代位,既不代表進位也不代表溢出;運算結果的高半部分有表溢出;運算結果的高半部分有有效數據,則有效數據,則OF=CF=1OF=CF=1,否則為,否則為0 04.2 4.2 指令系統指令系統第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統53無符號數乘法指令,若運算結果的高一半是0,則標志OF與CF為0;否則,OFCF1,以表示有效數字是在AH或DX中。帶符號數乘法指令,若結果中的高一半是結果中的低一半符號位的擴展,則OFCF0,否則OFCF1。 例如,若是8位數相乘,結果AH中D0D7各位相等,且與AL的D7相等,則OFCF0。OFCF1表示AH或DX的內
59、容是積的有效數字。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統54 例如:AX04E8H,DS0100H,BX0006H,存儲單元01006H的字是4E20H,執行指令 IMUL BX 應為 IMUL WORD PTR BX之后, DX017FH ,AX4D00H,OFCF1。例如:執行以下指令 MOV AL,0FBH MOV BH,02H IMUL BH 可得到AX0FFF6H,即10,CF0,OF0。0FBH為5。 補碼0FBH=11111011B, 取反:00000100B,加1:00000101B為5。 若將IMUL換成MUL,則得到AX01F6H,
60、即502,CFl,OFl。第第3 3章章 8086/8088CPU8086/8088CPU指令系統指令系統554.2.2 4.2.2 算術運算類指令算術運算類指令3. 3. 二進制數據除法指令二進制數據除法指令除法運算的目的操作數是隱含的,字節(被除數16位、除數8位)除法運算隱含在AX中,運算結果是兩個8位數,商存放在AL中,余數存放在AH中;字(被除數32位、除數16位)除法運算隱含在DX和AX中,運算結果是兩個16位數,商存放在AX中,余數存放于DX中。 (1)(1)無符號除法指令無符號除法指令 DIV SRCDIV SRC除法運算的操作數可以是通用寄除法運算的操作數可以是通用寄存器操作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 良品鋪子采購管理
- 店鋪轉賣合同協議書
- 禮贊師恩:教師節的歷史與傳承
- 情侶合同協議書公證
- 辦公樓物業管理實務培訓
- 擔保合同解除協議書
- 建房合同包工協議書
- 供貨質量合同協議書
- 民工勞務合同協議書
- 墻紙施工合同協議書
- 新版FMEA(AIAG-VDA第一版)PFMEA過程FMEA課件PPT
- 青島版小學科學實驗目錄
- 運維服務質量保障措施9948
- 煤礦井下低壓電網保護裝置整定(原)-課件
- MySQL數據庫PPT完整全套教學課件
- 承包商資格預審表
- C語言實現FFT(快速傅里葉變換)
- 電渣爐原理教案
- 激光切割機日常點檢表
- 細胞膜-系統的邊界【公開課教學PPT課件 高中生物】
- 太原理工大學年博士研究生招生入學考試試題
評論
0/150
提交評論