工學第3章指令系統(tǒng)課件_第1頁
工學第3章指令系統(tǒng)課件_第2頁
工學第3章指令系統(tǒng)課件_第3頁
工學第3章指令系統(tǒng)課件_第4頁
工學第3章指令系統(tǒng)課件_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第3章 80X86的尋址方式和指令系統(tǒng)第1節(jié) 80X86的數(shù)據(jù)類型第2節(jié) 80X86的尋址方式第3節(jié) 80X86的指令系統(tǒng)1第1頁,共106頁。學習指導和要求掌握80486的七種數(shù)據(jù)類型;熟練掌握九種尋址方式;熟記各種類型的指令格式及功能,并能編寫簡單程序。2第2頁,共106頁。 第1節(jié) 80X86的數(shù)據(jù)類型 80486匯編語言中可使用的數(shù)據(jù)類型有以下七種: 無符號二進制數(shù) 字節(jié)(8位):0255 (00FFH),占用一字節(jié)存儲單元。 字(16位):065535 (00FFFFH),占用連續(xù)的兩字節(jié)存儲單元,低地址存儲單元存放低8位數(shù)據(jù),高地址存儲單元存放高8位數(shù)據(jù),低字節(jié)地址為該字的地址。

2、 雙字(32位):04294967299 (00FFFFFFFFH),占用連續(xù)的四字節(jié)存儲單元,最低地址存儲單元存放最低8位數(shù)據(jù),最高地址存儲單元存放最高8位數(shù)據(jù),最低字節(jié)地址為該雙字的地址。3第3頁,共106頁。有符號二進制數(shù)字節(jié): -128+127 (80HFFH, 00H7FH)字: -32768+32767 (8000HFFFFH, 00000H7FFFH)雙字:-2147483650+2147483649 (80000000HFFFFFFFFH,000000000H7FFFFFFFH) 以補碼形式存儲,地址單元分配與無符號數(shù)類似。浮點數(shù)(實數(shù))單精度數(shù)(32位):數(shù)據(jù)格式如下: 階

3、碼 有 效 數(shù) 31 30 23 22 0符號位1.1位符號,8位階碼,24位有效數(shù)(顯式23位,外加1位隱含的整數(shù)“1.”。4第4頁,共106頁。雙精度數(shù)(64位): 數(shù)據(jù)格式如下:1位符號,11位階碼,53位有效數(shù)(顯式52位,外加1位隱含的整數(shù)“1.”。 63 62 52 51 0 階 碼 有 效 數(shù)符號位1.擴展精度數(shù)(80位): 數(shù)據(jù)格式如下:79 78 64 63 62 0 階 碼 1 有 效 數(shù)符號位1位符號,15位階碼,64位有效數(shù)(內(nèi)含1位整數(shù)1,小數(shù)點是隱含的。.5第5頁,共106頁。BCD碼壓縮BCD碼:1字節(jié)存放兩個BCD碼,格式如圖a 7 4 3 0 7 4 3 0

4、(a) (b)非壓縮BCD碼:1字節(jié)存放一個BCD碼(低4位),格式如圖b串數(shù)據(jù)位串:從任何字節(jié)的任何位開始的相鄰位序列,最長可達232-1位字節(jié)/字/雙字串:是字節(jié)、字、雙字的相鄰序列,最長可達232-1字節(jié)。十位 個位0或任意 個位6第6頁,共106頁。ASCII碼數(shù)據(jù) ASCII碼字符串: 如ABC123 ASCII碼數(shù): 如30H39H(09),41H46H(AF)指針數(shù)據(jù)近指針(32位): 是一個32位的段內(nèi)偏移地址,段內(nèi)尋址時使用。遠指針(48位): 是一個由16位選擇符和32位偏移量組成,段間尋址時使用。返 回7第7頁,共106頁。 第2節(jié) 80X86的尋址方式 尋找指令中所需操

5、作數(shù)或操作數(shù)地址的方式稱為尋址方式。指令的操作數(shù)來自:(1)操作數(shù)包含在指令中。(2)操作數(shù)包含在CPU的某個內(nèi)部寄存器中。(3)操作數(shù)在內(nèi)存儲器中。尋找此操作數(shù),先找到該操作數(shù)在內(nèi)存中存放的地址,再從該地址中取操作數(shù)。內(nèi)存單元的地址由段基址和偏移地址組成。偏移地址由基址寄存器、間(變)址寄存器、比例因子、位移量組合而成。8第8頁,共106頁。由偏移地址元素按某種計算方法組合形成的偏移地址稱為有效地址EA(Effective Address)。計算方法:EA=基址+(間址比例因子)+位移量采用16位尋址,位移量是8位或16位,用BX和BP作基址寄存器,SI和DI作間址寄存器,比例因子為1。采用

6、32位尋址,可使用8位和32位的位移量,32位的通用寄存器都可作基址寄存器或間址寄存器(ESP不用于間址),可采用1、2、4、8幾種比例因子。9第9頁,共106頁。80X86的尋址方式共有11種:1.立即數(shù)尋址2.寄存器尋址3.直接尋址4.寄存器間接尋址5.(帶位移的)基址尋址 6.(帶位移的)間址尋址7.(帶位移的)比例間址尋址8.基址加間址尋址9.基址加比例間址尋址10. 帶位移的基址加間址尋址11. 帶位移的基址加比例間址尋址10第10頁,共106頁。1 立即尋址 指定的操作數(shù)緊跟在操作碼之后,直接存放在代碼段中。如:MOV BL,56H ;BL 56H MOV AX,2056H ;AX

7、 2056H MOV ECX,12345678H ;ECX 12345678H 立即數(shù)只能作源操作數(shù)。不能作目的操作數(shù)。2 寄存器尋址操作數(shù)在CPU的寄存器中,而寄存器的名由指令指出。如:INC CL ;CL (CL)+1 MOV AX,BX ;AX (BX)11第11頁,共106頁。3 直接尋址操作數(shù)有效地址(16位或32位)直接包含在指令中,它位于操作碼之后,存放在代碼段中。如果指令無前綴指明在那一段中,則默認操作數(shù)存放在數(shù)據(jù)段。 如:MOV AX,2000H ;DS段2000H的內(nèi)容送AL, 2001H的內(nèi)容送AH MOV AX,F(xiàn)S:2000H;FS段2000H的內(nèi)容送AL, 2001

8、H的內(nèi)容送AH4 寄存器間接尋址操作數(shù)的偏移地址存放在寄存器中,而操作數(shù)存放在存儲器中。 (1)16位尋址 EA= (SI)、(DI)、 (BX)、(BP) 無前綴默認操作數(shù)存放在數(shù)據(jù)段無前綴默認操作數(shù)存放在堆棧段12第12頁,共106頁。例如: MOV AX,BX ; AX (DS)*10H+(BX) MOV AX,BP ; AX (SS)*10H+(BP) MOV AX,ES:BX; AX (ES)*10H+(BX) MOV AX,DS:BP; AX (DS)*10H+(BP)(2)32位尋址EA= (EAX)、(EBX)、 (ECX)、(EDX)、(ESP)、(EBP) 、(ESI)、(

9、EDI)ESP、EBP默認操作數(shù)存放在堆棧段,其它默認操作數(shù)存放在數(shù)據(jù)段。 例如:MOV AX,EBX ;DS段字數(shù)據(jù)送AX MOV AX,EBP ;SS段字數(shù)據(jù)送AX MOV ECX,ES:EBX ; ES段雙字數(shù)據(jù)送ECX 13第13頁,共106頁。5 (帶位移的)基址尋址基址寄存器內(nèi)容與位移量之和形成操作數(shù)的有效地址。即: EA=(基址寄存器)+位移量 (1) 16位尋址 EA=(BX)、(BP)+位移量(帶符號8或16位整數(shù)),BX默認段寄存器DS,BP默認段寄存器SS如: MOV AX,2040HBX 或 MOV AX,BX+2040H;DS段(BX)+2040H中的字 數(shù)據(jù)送AX。

10、 (2) 32位尋址 EA=(8個32位通用寄存器)+位移量(帶符號8或32位整數(shù)) 如:MOV ECX,1500HEAX;DS段(EAX)+1500H 或MOV ECX, EAX +1500H 中的雙字數(shù)據(jù)送ECX。14第14頁,共106頁。6 (帶位移的)間址尋址間址寄存器內(nèi)容與位移量之和形成操作數(shù)的有效地址。即: EA=(間接寄存器)+位移量 (1) 16位尋址 EA=(SI)、(DI)+位移量(帶符號8或16位整數(shù))如: MOV AX,2040HSI 或 MOV AX,SI+2040H;DS段(BX)+2040H中的字 數(shù)據(jù)送AX。 MOV DX, COUNTDI (2) 32位尋址

11、EA=(除ESP外的其他7個寄存器)+位移量(帶符號8或32位整數(shù)) 如:MOV ECX,1500HEAX;DS段(EAX)+1500H 或MOV ECX, EAX +1500H 中的雙字數(shù)據(jù)送ECX。(帶位移的)基址尋址、間址尋址合稱為相對寄存器間址15第15頁,共106頁。7 (帶位移的)比例間(變)址尋址(32位尋址) 間址寄存器內(nèi)容乘以比例因子再加位移量之和形成操作數(shù)的32位有效地址。即: EA=(變址寄存器)*比例因子+位移量 如:MOV EAX,1200HESI*48 基址加間(變)址尋址 基址寄存器內(nèi)容與間址寄存器內(nèi)容之和形成操作數(shù)的有效地址。即:EA=(基址寄存器)+(變址寄存

12、器) (1) 16位尋址 基址寄存器:BX、BP; 變址寄存器:DI、SI如:MOV AX,BX+SI或MOV AX,BXSI;DS段(BX)+(SI)中的字數(shù) 據(jù)送AX。 16第16頁,共106頁。 (2) 32位尋址 基址寄存器: 任何一個32位通用寄存器 變址寄存器:除ESP之外的任一個32位通用寄存器 如:MOV AX,EBX+ECX ;DS段(EBX)+(ECX)中 或 MOV AX,EBXECX 的字數(shù)據(jù)送AX。 9 基址加比例間(變)址尋址(32位尋址)基址寄存器的內(nèi)容加變址寄存器內(nèi)容乘以比例因子,形成操作數(shù)的32位有效地址。即: EA= (基址寄存器) +(間址寄存器)*比例因

13、子如:MOV AX,EBX*4+ESI(默認段DS)17第17頁,共106頁。10 帶位移的基址加間址尋址基址寄存器內(nèi)容與變址寄存器內(nèi)容再加偏移量之和形成操作數(shù)的有效地址。即: EA=(基址寄存器)+(變址寄存器)+偏移量 如 : MOV A X,1234HBX+DI 或MOV AX,BX+DI+1234H 或MOV AX,1234HBXDI ;DS段 (BX)+(DI)+1234H中的字數(shù)據(jù)送AX。18第18頁,共106頁。11 帶位移的基址加比例間(變)址尋址(32位尋址)基址寄存器的內(nèi)容加變址寄存器內(nèi)容乘以比例因子再加上位移量之和,形成操作數(shù)的32位有效地址。即:EA =(基址寄存器)+

14、(變址寄存器)*比例因子+位移量如:MOV AX,EDI*8+EBX+40H MOV ECX,2000HEDX*4EAX比例變址尋址、基址加比例變址尋址、帶位移的基址加比例變址尋址只有32位尋址一種情況。19第19頁,共106頁。與跳轉有關的尋址方式與跳轉有關的尋址方式用于確定程序轉移或調(diào)用的目標。如:無條件轉移語句:JMP dst dst:轉移目標調(diào)用語句:CALL dst dst:調(diào)用目標 參見轉移和調(diào)用指令一節(jié)。練習題:假設(DS)=2000H, (ES)=2100H, (SS)=1500H, (SI)=00A0H, (BX)=0100H, (BP)=0040H,指令 MOV AX, s

15、rc中, 以下src為何種尋址方式?有效地址和物理地址各是多少? (1)100HBX (2)BX (3)BP (4)ES:BX+10H (5)BX (6)1000H (7)SI (8)1000HBX+SI (9)1000HBPSI (10)BXSI20第20頁,共106頁。 第3節(jié) 80X86的指令系統(tǒng)一、指令格式 指令格式: 標號: 操作碼 操作數(shù), ;注釋 其中: 標號:確定匯編語句的位置,提供跳轉、循環(huán)的目標。 操作碼:匯編語句操作。 操作數(shù):操作數(shù)據(jù)項,數(shù)目因操作碼而異。 注釋:程序注解。 如:START:MOV AX,DATA MOV DS,AX ;設置DS21第21頁,共106頁。

16、一條指常由6個字段組成,字段1為前綴字段,字段26為基本字段。1. 前綴字段前綴字段用于修改指令操作的某些屬性,為可選字段。 (1)段超越前綴:用于指明某個段寄存器取代指令中默認的段寄存器。(2)操作數(shù)寬度前綴:用于改變當前操作數(shù)的默認寬度值。(3)地址寬度前綴:用于改變當前地址的默認寬度值。(4)重復前綴:用于重復串的操作。(5)總線鎖定前綴:用于產(chǎn)生LOCK信號,防止其他設備中斷CPU在總線上的操作。22第22頁,共106頁。2. 操作碼字段(OP Code)它規(guī)定了指令的操作性質(zhì)。此字段不可省咯。3. 尋址方式字段(mod r/m和s-i-b)此兩個字段稱為尋址方式說明符字段。mod r

17、/m為主尋址字節(jié),而s-i-b為第二尋址字節(jié)。4. 位移量字段(Displ)當尋址方式中需要位移量時,指令中將出現(xiàn)此字段。其長度為1,2,4個字節(jié),通常用帶符號數(shù)(補碼)表示。5. 立即數(shù)字段(Data)當尋址方式是立即數(shù)尋址時需用此字段,其長度為I,2,4個字節(jié),立即效字段總是該指令的最后字段。操作碼字段是必選字段,其它各字段可根據(jù)不同的尋址方式選用。23第23頁,共106頁。二、指令系統(tǒng) 80X86的指令系統(tǒng)分為整數(shù)指令、浮點數(shù)指令和操作系統(tǒng)指令。 整數(shù)指令:數(shù)據(jù)傳送類、算術運算類、邏輯運算類、串操作類、控制轉移類、處理器控制類、高級和保護控制類指令等浮點數(shù)指令:數(shù)據(jù)傳送、算術運算、比較、

18、超越函數(shù)、常量、控制等指令操作系統(tǒng)型指令24第24頁,共106頁。 指令操作數(shù)符號說明: OP1,OP2,OP3:操作數(shù) reg :通用寄存器。長度可以是8位、16位、32位 reg8 :8位通用寄存器 reg16 :16位通用寄存器 reg32 :32位通用寄存器 Sreg :段寄存器(段選擇符) mem :存儲器。長度可以是8位、16位、32位 mem8 :8位存儲器 mem16 :16位存儲器 mem32 :32位存儲器 imm :立即數(shù)。長度可以是8位、16位、32位 imm8 :8位立即數(shù) 累加器:Acc I/O端口:Port src(源):源操作數(shù) dst(目標):目標操作數(shù)25第

19、25頁,共106頁。與運算有關的標志標志寄存器FLAGS中存放運算結果的屬性。CF:進位/借位標志。加、減運算最高位產(chǎn)生進位/借位時置1。AF:輔助進位/借位標志。加、減運算時低半字節(jié)位產(chǎn)生進位/借位時置1。OF:溢出標志。有符號數(shù)二進制加、減運算結果超出范圍時置1。ZF:零標志。結果為零時置1。SF:符號標志。結果為負時置1。PF:奇偶標志。結果最低字節(jié)“1”的個數(shù)為偶數(shù)時置1。26第26頁,共106頁。 指令執(zhí)行對標志位影響的符號說明: X :表示相應標志位狀態(tài)依運算或操作結果決定 0 : 表示相應標志位無條件清“0” 1 :表示相應標志位無條件置“1” U : 表示相應標志位狀態(tài)未定義,

20、狀態(tài)隨機 - : 表示相應標志位狀態(tài)不受影響,保持原狀態(tài) r : 恢復原來保存的值27第27頁,共106頁。數(shù)據(jù)傳送類指令 用于實現(xiàn)存儲器與寄存器、寄存器與寄存器、累加器與I/O端口之間字節(jié)、字或雙字的傳送,也可將立即數(shù)傳送到存儲器或寄存器。這類指令基本上不影響標志位。傳送指令MOV 指令格式:MOV OP1, OP2 reg/Sreg,reg reg, Sreg reg/Sreg, mem mem, reg/Sreg reg, imm mem, imm28第28頁,共106頁。 功能:把OP2的內(nèi)容傳送到OP1中,OP1和OP2為字節(jié)、字或雙字 說明:立即數(shù)只能作為源操作數(shù),而其他三種既可作

21、源操作數(shù)又可作目的操作數(shù); 存儲器和存儲器之間(串操作除外)以及段寄存器和段寄存器之間不允許傳數(shù),CS不能作目的操作數(shù),立即數(shù)不能直接送段寄存器,源操作數(shù)和目標操作數(shù)不能一個是字節(jié)一個是字,類型要一致,立即數(shù)只能出現(xiàn)在源操作數(shù)位置。 例如:用如下指令可給數(shù)據(jù)段寄存器DS賦初值 MOV AX,DATA MOV DS, AX 再如:MOV EBX, 12345678H MOV AX, BX+2429第29頁,共106頁。交換指令XCHG 指令格式:XCHG OP1, OP2 reg, reg mem,reg reg, mem 功能:用于交換兩個操作數(shù)。 說明:指令中的兩個操作數(shù)可以是兩個寄存器操作

22、數(shù),或一個寄存器與一個存儲器操作數(shù)。 例如:XCHG AX, BX XCHG AX, BX XCHG BX+20H, AX30第30頁,共106頁。I/O指令IN和OUT 指令格式: IN OP1,OP2 OUT OP1, OP2 AL, imm8 imm8, AL AX,imm8 imm8, AX EAX,imm8 imm8, EAX AL, DX DX, AL AX, DX DX, AX EAX,DX DX, EAX 功能:用于在I/O端口和CPU之間的信息交換,只能用AL、AX或EAX接收或發(fā)送數(shù)據(jù)。 31第31頁,共106頁。 例如: IN AL,0FAH ;從端口FAH讀一個字節(jié)到A

23、L IN EAX,28H ; 從端口28H讀一個雙字到EAX MOV DX,3AEH; I/O地址大于255時應通過 DX間接尋址 IN AX,DX ;從DX指定的端口讀入一個字到AX OUT 21H,AL ;將8位數(shù)從AL輸出到端口21H OUT DX,EAX ;將32位數(shù)從EAX輸出到DX指 定的端口32第32頁,共106頁。裝入有效地址指令LEA 格式: LEA OP1, OP2 reg32,mem reg16,mem 功能:將有效地址(即偏移地址)送通用寄存器。 例如:LEA ECX, DOLLARESI*4+EDX 設: EDX=30H,ESI=32H,DOLLAR=7580H, 則

24、 ( ECX)=7678H(32H*4 + 30H +7580H)33第33頁,共106頁。裝入全地址指令LDS,LES,LFS.LGS,LSS 格式: LDS reg,mem LES reg,mem LFS reg,mem LGS reg,mem LSS reg,mem 功能:取mem指示的32位或48位全地址指針,裝入段寄存器和16位或32位reg中。 34第34頁,共106頁。 對于實地址方式和虛擬8086方式,段基址和偏移地址都是16位 ,段基址送段寄存器,偏移地址送reg中。 例如:X DD 12345678H LDS SI ,X ;DS=1234H,SI=5678H 對于16位和3

25、2位保護方式,選擇符送段寄存器,偏移地址送reg中。 例如:X1 DF 123456780010H; 32位偏移值+ 16 位選擇符 LDS ESI,X1 ; DS=1234H , ESI=56780010H 35第35頁,共106頁。壓棧/彈棧指令PUSH/POP 格式:PUSH OP1 POP OP1 imm16 mem16 imm32 mem32 mem16 reg16 mem32 reg32 reg16 功能: reg32 PUSH指令使(E)SP的內(nèi)容減2或減4,然后把16位或32位的立即數(shù)、存儲器操作數(shù)或寄存器操作數(shù)壓入堆棧, SS:(E)SP指向新的棧頂。 POP指令從堆棧把字或

26、雙字彈出至16位或32位存儲器或通用寄存器中,(E)SP的內(nèi)容加2或加4。 36第36頁,共106頁。例如:PUSH AX;(SP)-2 SP,(AX) (SP) PUSH BX;(SP)-2 SP,(BX) (SP) PUSH CX;(SP)-2 SP,(CX) (SP) . . . POP CX;(SP) CX,(SP)+2 SP POP BX;(SP) BX,(SP)+2 SP POP AX;(SP) AX,(SP)+2 SP 堆棧為“先進后出”的數(shù)據(jù)結構。37第37頁,共106頁。棧底棧底SPSP00H20H60H30H40H60H棧頂SSSS圖A圖B設: AX=6040H,BX=30

27、60H,CX=2000H 執(zhí)行PUSH指令后,堆棧狀態(tài)如圖A,執(zhí)行POP指令后,堆棧狀態(tài)如圖B。38第38頁,共106頁。已知(IP)=1000H,(SP)=2000H,(BX)=283FH,CALL WORD PTRBX指令的機器碼是FF17H,試問執(zhí)行該指令后,SS:1FFEH的值是多少?( )(A) 28H (B) 3FH (C) 00 (D) 02H39第39頁,共106頁。全部通用寄存器壓棧和出棧指令格式:PUSHA/POPA;16位通用寄存器壓棧和 出棧指令。入棧順序為: AX、CX、DX、 BX、 SP、BP、SI和DI。 PUSHAD/POPAD;32位通用寄存器壓棧和 出棧指

28、令。入棧順序為: EAX、ECX、EDX、EBX、 ESP、EBP、ESI和EDI。 其中:SP和ESP為操作前的棧頂指針。 40第40頁,共106頁。 標志寄存器傳送指令指令格式:LAHF ; F寄存器內(nèi)容送AH指令SAHF ; AH內(nèi)容送F寄存器指令PUSHF ; 16位F內(nèi)容進棧指令(保存F)POPF ; 16位F內(nèi)容出棧指令(恢復F)PUSHFD;32位F內(nèi)容進棧指令(保存F)POPD ;32位F內(nèi)容出棧指令(恢復F)41第41頁,共106頁。查表轉換指令XLAT 格式:XLAT ; AL (BX)+(AL) 功能:完成一個字節(jié)的查表轉換 BX指向表的首地址(DS段內(nèi)),AL裝入要轉換

29、的代碼在表中的序號,并XLAT指令執(zhí)行的結果存于AL中。 例如:查找ASCII碼表中, (BX) 3的ASCII碼。 程序如下: (BX)+(AL) MOV DS,AX LEA BX,TABLE;DS段表的首地址送BX MOV AL,3 ;要轉換的代碼在表中的序號3送AL XLAT ;AL (BX)+(AL),查找到的3的 ASCII碼33H保存在AL中序號01234.TABLE 30H 31H 32H 33H 34H . . 42第42頁,共106頁。算術運算指令 支持加、減、乘、除四種基本算術運算,其操作對象可以是字節(jié)、字、雙字的二進制整數(shù),也可以是壓縮、非壓縮BCD碼。算術運算指令一般會

30、影響FLAGS寄存器中的狀態(tài)標志。加法和減法指令ADD/SUB格式:ADD OP1,OP2; OP1 OP1+OP2,置標志位 reg, reg reg, mem reg, imm mem,reg mem,imm43第43頁,共106頁。ADD的功能:將OP1和OP2相加,結果存放在OP1。例:ADD AX,BX ; AX (AX)+(BX)ADD EBX,ECX ;EBX (EBX)+(ECX)ADD 3000H,AX ;3000H (3000H)+(AX)ADD 3000H,23 ; 3000H (3000H)+23SUB OP1,OP2 ; OP1 OP1-OP2 ,置標志位 reg,

31、reg reg, mem reg, imm mem,reg mem,imm44第44頁,共106頁。SUB的功能:從OP1中減去OP2,結果存OP1中。例:SUB AX,BX ; AX (AX)-(BX) SUB EAX,ECX ;EAX (EAX)-(ECX) SUB N,12345678H; N (N)-12345678HADD和SUB對標志位的影響:OF SF ZF AF PF CFX X X X X X例:設AL=64H,AH=0A8H,求執(zhí)行下列指令的結果和標志位的狀態(tài)。 (1) ADD AL,AH ; AL (AL)+(AH),有符號數(shù).解:01100100 100D 得: (AL

32、)=0CH(正確) + 10101000 -88D OF SF ZF AF PF CF 1 00001100 12D 0 0 0 0 1 145第45頁,共106頁。(2) SUB AL,AH ; AL (AL)-(AH),有符號數(shù).解:| 01100100 100D 得: (AL)=BCH(不正確) - 10101000 -88D OF SF ZF AF PF CF 10111100 -68D 1 1 0 1 0 1 有符號數(shù)加、減的結果有“溢出”的判斷規(guī)則: 對于加法: 正數(shù)+正數(shù)=負數(shù),負數(shù)+負數(shù)=正數(shù) 對于減法: 正數(shù)-負數(shù)=負數(shù), 負數(shù)-正數(shù)=正數(shù) 例:設(AL)=7FH,(BL)=

33、40H,判斷執(zhí)行ADD AL,BL指令的結果是否正確。解: 01111111 127D 得: (AL)=0BFH(不正確) + 01000000 64D OF SF ZF AF PF CF 10111111 -65D 1 1 0 0 0 046第46頁,共106頁。帶進/借位的加、減法指令ADC/SBB格式:ADC OP1,OP2;OP1 OP1+OP2+CF ,置標志位 reg, reg reg, mem reg, imm mem,reg mem,immADC的功能:將OP1、OP2和進位標志位CF相加,結果存放在OP1。例: ADC AX,375 ; AX (AX)+375+CF ADC

34、EBX,ECX;EBX (EBX)+(ECX)+CF47第47頁,共106頁。SBB OP1,OP2; OP1 OP1-OP2-CF ,置標志位 reg, reg reg, mem reg, imm mem,reg mem,immSBB的功能:從OP1中減去OP2,再減去借位標志CF,結果存OP1中。例: SBB AX,BX;AX (AX)-(BX)-CF SBB ECX,456789ABH; ADC和SBB對標志位的影響: OF SF ZF AF PF CF X X X X X X48第48頁,共106頁。格式:DEC OP1 ; OP1 OP1-1,置標志位 mem reg功能:INC使操

35、作數(shù)的值加1;DEC使操作數(shù)的值減1,常用于修改計數(shù)器或地址指針。例:下面是從300H端口輸出256個字節(jié)數(shù)據(jù)的程序段:BUFFER DB 12,34, MOV CX,256 MOV SI,OFFSET BUFFER MOV DX,300HNEXT :MOV AL,SI OUT DX,AL INC SI ;地址加1,取下一個數(shù) LOOP NEXT ;未完,繼續(xù)49第49頁,共106頁。INC和DEC對標志位的影響:OF SF ZF AF PF X X X X X 交換加法指令XADD 格式:XADD OP1,OP2;OP1 OP1+OP2 OP2 OP1 功能:OP1與OP2相加,結果存于OP

36、1中,并將OP1的值送OP2中。 例:XADD EAX,ECX ;EAX (EAX)+(ECX) ECX (EAX)變反指令NEG 格式:NEG OP1 ;OP1 0-OP1,置標志位 功能:求OP1的相反數(shù)。50第50頁,共106頁。ADD 和ADC、SUB和SBB經(jīng)常配合使用,完成64位加、減法運算。例:ADD EAX,ECX;EAX (EAX)+(ECX)ADC EBX,EDX;EBX (EBX)+(EDX)+CFSUB EAX,ECX ;EAX (EAX)-(ECX) SBB EBX,EDX ;EBX (EBX)-(EDX)-CF加1/減1指令INC/DEC格式:INC OP1; OP

37、1 OP1+1,置標志位 mem reg 51第51頁,共106頁。例:NEG AL ;AL 0-(AL)若(AL)=13H,執(zhí)行NEG指令后,(AL)=EDH比較指令CMP格式:CMP OP1,OP2;OP1-OP2,置標志位 reg, reg reg, mem reg, imm mem,reg mem,imm功能:將OP1減去OP2,但結果不存在OP1中,只使結果影響標志位。 CMP指令用于比較OP1與OP2的大小,由標志位來反映兩數(shù)的關系(見表A)。52第52頁,共106頁。 A-B CF ZF SF OF A=B 0 1 0 0 AB 0 0 - - AB - 0 0/1 0/1表A

38、比較并交換指令CMPXCHG 格式:CMPXCHG OP1,OP2 功能:將OP1與累加器(AL、AX或EAX)的內(nèi)容進行比較,若相等則將OP2存于OP1中;否則將OP1送到累加器中。例:CMPXCHG CX,DX;若(CX)=(AX) 則CX (DX),否則AX (CX)第53頁,共106頁。無符號數(shù)乘法指令MUL 格式:MUL OP1 reg mem 功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運算時乘積返回到AX;字運算時乘積 返 回 到 DX:AX;雙 字 運 算 時 乘 積 返 回 到 EDX:EAX。源操作數(shù)不能是立即數(shù)。例:MUL CL; AX ( AL)

39、*(CL) MUL BX;DX:AX (AX)*(BX) MUL DWORDESI;EDX:EAX (EAX)*(ESI) MUL指令影響標志位 OF和 CF: 若積的高字節(jié)、字或雙字為“0”,則OF、CF清“0”,否則OF、CF置“1”。54第54頁,共106頁。 有符號乘法指令IMUL 指令格式有下列三種: (1)單操作數(shù):IMUL OP1 reg mem 功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運算時乘積返回到AX;字運算時乘積 返 回 到 DX:AX;雙 字 運 算 時 乘 積 返 回 到 EDX:EAX。 (2)雙操作數(shù):IMUL OP1,OP2 reg,

40、 reg reg, mem reg, imm功能:OP1乘以OP2,積存放在OP1中。Reg為16或32位。55第55頁,共106頁。 (3)三操作數(shù):IMUL OP1,OP2,OP3 reg, reg, imm reg, mem, imm 功能:OP2乘以OP3,積存放在OP1中。reg為16位。 例如: IMUL DL ;AX (AL)*(DL) IMUL EBX ;EDX:EAX (EAX)*(EBX) IMUL BX,CX ;BX (BX)*(CX) IMUL BX,CX,4 ;BX (CX)*4IMUL指令影響標志位 OF 和 CF對(1)若乘積的高半部分是低半部分的符號位的擴展,則

41、CF=OF=0,否則CF=OF=1。對(2)、(3)如果乘積超過目標寄存器所能 存儲的范圍,則系統(tǒng)將置溢出標志OF為1。56第56頁,共106頁。除法指令DIV/IDIV 格式:DIV OP1 ;無符號除法 reg mem IDIV OP1 ;有符號除法 reg mem 功能: 字節(jié)運算時,被除數(shù)隱含在AX中,OP1為字節(jié)除數(shù),商存入AL,余數(shù)存入AH。 字運算時,被除數(shù)隱含在DX:AX中,OP1為字除數(shù),商存入AX,余數(shù)存入DX 雙字運算時,被除數(shù)隱含在EDX:EAX中,OP1為雙字除數(shù),商存入EAX,余數(shù)存入EDX。57第57頁,共106頁。 例如: DIV BL ;(AX)/(BL),商

42、存入AL,余數(shù)存入AH。 IDIV ECX ;(EDX:EAX)/(ECX) 商存入EAX,余數(shù)存入EDX。 符號擴展指令 格式: CBW ;將AL中8位帶符號數(shù)擴展為16位存入AX。 CWD ;將AX中16位帶符號數(shù)擴展為32位存入DX:AX CWDE;將AX中16位帶符號數(shù)擴展為32位 存入EAX。 CDQ ;將EAX中32位帶符號數(shù)擴展為64位 存入 EDX:EAX。58第58頁,共106頁。符號擴展指令常用于帶符號數(shù)除法運算時,對被除數(shù)位數(shù)的擴展。當兩個帶符號數(shù)的字節(jié)/字/雙字數(shù)相除時,必須將被除數(shù)擴展為雙倍長度。例如:編寫程序,計算789AH/1234H。BUFFER DW 789A

43、H ;被除數(shù) DW 1234H ;除數(shù) DD 0 ;存結果 START: MOV BX,OFFSET BUFFER MOV AX,BX ;取被除數(shù) CWD ;字擴展為雙字,AX符 號位擴展到DX各位 IDIV 2BX ;帶符號除 MOV 4BX,AX ;存商 MOV 6BX,DX ;存余數(shù)59第59頁,共106頁。 十進制(BCD碼)調(diào)整指令 壓縮BCD碼運算:將壓縮BCD數(shù)用二進制加、減指令 (ADD, SUB, ADC, SBC)運算,運算結果必須用以下調(diào)整指 令調(diào)整為壓縮BCD數(shù)的結果。 指令格式及功能: DAA ;將AL中的和調(diào)整為壓縮BCD數(shù) DAS ;將AL中的差調(diào)整為壓縮BCD數(shù)

44、 非壓縮BCD字節(jié)數(shù)加、減、乘、除(ASCII調(diào)整) 非壓縮BCD碼運算:將非壓縮BCD數(shù)用二進制加、減、乘、除指令運算,配合相應的調(diào)整。 AAA ;將AL中的和調(diào)整為非壓縮BCD數(shù) AAS ;將AL中的差調(diào)整為非壓縮BCD數(shù) AAM ;將AL中的積調(diào)整為非壓縮BCD數(shù) AAD ;調(diào)整AX中的被除數(shù),相除的商即為非壓縮BCD數(shù)第60頁,共106頁。DAA: 若AL的低4位9AF=1,則: (AL)(AL)+6,AF1;若AL的高4位9CF=1,則: (AL)(AL)+60H,CF1。 DAS:若AL的低4位9AF=1,則: AL(AL)-6,AF1;若AL的高4位9CF=1,則: AL(AL)

45、-60H,CF1。 61第61頁,共106頁。AAA: 如果AL的低4位9 或AF=1,則: AL(AL)+6,AH(AH)+1,AF1 AL(AL)0FH) CFAF否則AL(AL)0FHAAS: 如果AL的低4位9或AF=1,則: AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF否則AL(AL)0FH。 62第62頁,共106頁。AAM:AH(AL)/0AH,AL(AL)%0AH AAD: AL(AH)10+(AL),AH0 63第63頁,共106頁。BCD碼運算編程舉例例1 求組合BCD數(shù)1283+2574=3857 BCD1 DB 83H,12H BCD2 DB

46、 74H,25H BCD3 DB ?, ?START: MOV AL,BCD1 ADD AL,BCD2 DAA ;調(diào)整,(AL)=57H MOV BCD3,AL ;存和的底字節(jié) MOV AL,BCD1+1 ADC AL,BCD2+1 DAA ;調(diào)整,(AL)=38H MOV BCD+1,AL ;存和的高字節(jié)64第64頁,共106頁。例2 兩個ASCII碼數(shù)(7-5)相減 MOV AL, 7 ;37H SUB AL, 5 ;37H-35H AAS ;調(diào)整,(AL)=02H例3 非組合BCD數(shù)6*8=48 MOV AL, 06H MOV BL, 08H MUL BL ;AX (AL)*(BL) A

47、AM ;調(diào)整,(AX)=0408H例4 非組合BCD數(shù)17/5=3余2 MOV AX,0107H MOV BL, 05H AAD ;調(diào)整被除數(shù),(AX)=0011H DIV BL ;相除,(AL)=03,(AH)=02第65頁,共106頁。邏輯運算與移位指令 這類指令包括與、或、非、異或、測試和左移、 右移、循環(huán)左/右移指令。除NOT外,都影響某些標志位(OF、CF、PF、SF、ZF),對AF無影響或隨機。 邏輯與/或/異或指令AND/OR/XOR格式:AND/OR/XOR OP1, OP2 reg,mem reg,imm mem,reg mem,imm功能:兩操作數(shù)按位與、或、異或,結果存入

48、OP1中。第66頁,共106頁。例如:MOV AL,6 AND AL,0FH ;(AL)=06H MOV AL,6 OR AL,30H ;(AL)=36H MOV AL,0F0H XOR AL,0F0H ;(AL)=00H 測試指令TEST 格式:TEST OP1,OP2 reg, reg reg,mem reg,imm功能:兩操作數(shù)按位與,置標志位,不保存結果。 67第67頁,共106頁。TEST常用于測試某位的狀態(tài)。例如測試打印機是否空閑的程序段如下: MOV DX,3BDHPRTBUSY:IN AL,DX ;讀打印機狀態(tài) TEST AL,80H ;測試是否空閑 JZ PRTBUSY ;忙

49、,繼續(xù)測試 . . .邏輯非指令NOT格式: NOT OP1 reg mem功能:將操作數(shù)各位求反,對標志位沒有影響.68第68頁,共106頁。算術/邏輯左移指令SAL/SHL格式: SAL/SHL OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:將OP1向左移位,移動的次數(shù)由OP2決定,若移動的次數(shù)為1,OP2為立即數(shù),其它情況將移動的次數(shù)送入CL中。操作數(shù)每左移一位,在最低位補0,最高位移進CF中。 例:設(AL)=01010011B,將AL的內(nèi)容左移3位。 MOV CL,3 SHL AL,CL ; (AL)=1001100069第69頁,共1

50、06頁。算術/邏輯右移指令SAR/SHR 格式: SAR/SHR OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:將OP1向右移位,移動的次數(shù)由OP2決定,若移動 的次數(shù)為1,OP2為立即數(shù),其它情況將移動的次數(shù)送入CL 中。 對于SHR指令,操作數(shù)為無符號數(shù),每右移一位,在最高位補0,最低位移進CF中。 對于SAR指令,操作數(shù)為有符號數(shù),每右移一位,最高位保持不變,最低位移進CF中。70第70頁,共106頁。71第71頁,共106頁。例:設(AL)=10101001B,將AL的內(nèi)容算術/邏輯右移3位。算術右移3位: MOV CL,3 SAR AL

51、,CL;(AL)=11110101B邏輯右移3位: MOV CL,3 SHR AL,CL; (AL)= 00010101B 72第72頁,共106頁。循環(huán)移位指令ROL/ROR/RCL/RCR格式:ROL/ROR/RCL/RCR OP1, OP2 reg,imm8 mem,imm8 reg,CL mem,CL功能:ROL 為左循環(huán)移位指令,ROR為右循環(huán)移位指令,RCL和RCR則分別為帶CF的左循環(huán)移位和右循環(huán)移位指令。CFCFCFCFROLRORRCLRCR73第73頁,共106頁。串操作指令 串操作是指對存儲器中的一個或多個長度為字節(jié)、字或雙字的字符串進行操作,包括串傳送、串裝入、串存儲、

52、串比較、串掃描、串輸入、串輸出等。 串操作指令采用隱含尋址方式,約定: DS:SI(ESI)尋址源串,ES:DI(EDI)尋址目的串。 且偏移指針SI(ESI),DI(EDI)可根據(jù)DF方向標志自動增量或減量,以指向串中下一項。即: 當DF=0時,增1(字節(jié))、2(字)或4(雙字) 當DF=1時,減1(字節(jié))、2(字)或4(雙字)74第74頁,共106頁。串傳送指令格式:MOVSB ;字節(jié)傳送 MOVSW ;字傳送 MOVSD ;雙字傳送功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到ES:DI(EDI)指定的目的串中,并修自動改源、目指針。串裝入指令格式:LODSB ;裝入字節(jié)串 LODS

53、W ;裝入字串 LODSD ;裝入雙字串功能:將 DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到AL、AX或EAX中,并自動修改源指針。75第75頁,共106頁。串比較指令格式:CMPSB ;字節(jié)串比較 CMPSW ;字串比較 CMPSD ;雙字串比較功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)與ES:DI(EDI)指定的目的串中的數(shù)據(jù)進行比較,置標志位并自動修改指針。串存儲指令格式:STOSB ;存字節(jié)串 STOSW ;存字串 STOSD ;存雙字串功能:將AL、AX或EAX中的數(shù)據(jù)傳送到由ES:DI(EDI)指定的目的串中,并修改指針。 76第76頁,共106頁。串掃描指令格式:SCASB ;

54、掃描字節(jié)串 SCASW ;掃描字串 SCASD ;掃描雙字串功能:用AL、AX或EAX中的數(shù)據(jù)減去由ES:DI(EDI)指定的目的串中的數(shù)據(jù),置標志位并自動修改目的指針。 串輸入指令格式:INSB ;輸入字節(jié)串 INSW ;輸入字串 INSD ;輸入雙字串功能:從DX指定的端口輸入數(shù)據(jù)至由ES:DI(EDI)指定的目的串中,并自動修改目的指針。77第77頁,共106頁。串輸出指令格式:OUTSB ;輸出字節(jié)串 OUTSW ;輸出字串 OUTSD ;輸出雙字串功能:將 DS:SI(ESI)指定源串中的數(shù)據(jù)輸出到由DX指定的端口,并自動修改源指針。 重復前綴REP/REPZ/REPE/REPNE/

55、REPNZ 在串操作指令前加上重復前綴,可使該指令重復執(zhí)行。重復前綴的功能為: REP: CX (CX)-1 ,當(CX) 0時重復。 REPZ/REPE:相等時重復。即: CX (CX)-1,當(CX) 0且ZF=1時重復。 REPNE/REPNZ:不相等時重復。即: CX (CX)-1,當(CX) 0且ZF=0時重復。 REP常與MOVS和STOS指令配合使用。 REPZ/REPE 和REPNE/REPNZ常與CMPS和SCAS指令配合使用。78第78頁,共106頁。串操作指令應用舉例 使用串操作指令時,根據(jù)需要設置以下內(nèi)容: 設置DS:SI(ESI);ES:DI(EDI)設置DF標志設置

56、CX(ECX)選用重復前綴REP、REPE/REPZ、REPNE/REPNZ79第79頁,共106頁。例1 將數(shù)據(jù)段中的字符串ABC45傳送到附加段中。程序如下:DATA SEGMENT ST:MOV AX,DATA YCH DB ABC45 MOV DS,AX DATA ENDS MOV AX,EXTRA EXTRA SEGMENT MOV ES,AX MCH DB 5 DUP(?) LEA SI,YCHEXTRA ENDS LEA DI,MCHCODE SEGMENT MOV CX,5 ASSUME CS:CODE CLD ASSUME DS:DATA REP MOVSB ASSUME E

57、S:EXTRA CODE ENDS END ST 80第80頁,共106頁。 控制轉移指令 控制轉移指令包括: 無條件轉移指令(JMP) 條件轉移指令(JA、JB、JE) 循環(huán)控制指令(LOOP、LOOPZ、LOOPNZ) 調(diào)用/返回指令(CALL、RET) 中斷/中斷返回指令(INT、IRET)無條件轉移指令JMP格式:JMP OP1 lable ;標號 reg mem 功能:無條件地控制程序轉移到OP1所指定的目標地址。81第81頁,共106頁。JMP尋址方式:短轉移:在段內(nèi)的短距離(-128-127)轉移。段內(nèi)轉移:CS值不變,只給出地址偏移值。段間轉移:CS和(E)IP的值都發(fā)生改變的

58、轉移為明確表示標號或存儲單元的類型,可在操作數(shù)前加SHORT、NEAR、FAR、WORD、DWORD、FWORD等修飾符來限定,默認近轉移。如:段內(nèi)直接短轉移:JMP SHORT 標號段內(nèi)直接近轉移:JMP NEAR PTR 標號(范圍:16位)段內(nèi)間接轉移:JMP reg 或 WORD PTR mem段間直接轉移:JMP FAR PTR 標號或JMP segment:offset 段間間接轉移:JMP DWORD PTR mem(低16位:IP,高16位:CS)(直接:直接給出,間接:寄存器或存儲器給出) 82第82頁,共106頁。例如: JMP NEAR PTR TABLE ;帶標號的段內(nèi)

59、轉移 JMP FAR PTR TABLE ;帶標號的段間轉移 JMP SHORT TABLE ;帶標號的短轉移 JMP WORD PTR DX ;16位尋址時不帶標號的段內(nèi)轉移 JMP DWORD PTRDX ;16位尋址時不帶標號的段間轉移 JMP DWORD PTREDX;32位尋址時不帶標號的段間轉移 JMP FWORD PTREDX;32位尋址時不帶標號的段間轉移83第83頁,共106頁。條件轉移指令Jcc (p77表)格式:Jcc OP1 lable ;短標號或近標號功能:根據(jù)CPU中的標志位狀態(tài)組成的轉移條件CC,決定程序的執(zhí)行流向。 共19條指令,分為無符號數(shù)和有符號數(shù)的條件轉移

60、,執(zhí)行后均不影響標志位84第84頁,共106頁。單標志位條件轉移:指令助記符 轉移條件 說明JC CF=1 有進位轉移JNC CF=0 無進位轉移JE/JZ ZF=1 等于/為零轉移JNE/JNZ ZF=0 不等于/非零轉移JO OF=1 有符號數(shù)結果溢出轉移JNO OF=0 有符號數(shù)結果不溢出轉移JP/JPE PF=1 結果低8位奇偶校驗為偶轉移JNP/JNPE PF=0 結果低8位奇偶校驗為奇轉移JS SF=1 結果為負時轉移 JNS SF=0 結果為非負時轉移 85第85頁,共106頁。無符號數(shù)條件轉移指令:指令助記符 轉移條件 說明JA/JNBE CF=ZF=0 高于/不低于或等于轉移

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論