版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 80 x86匯編言語程序設(shè)計(jì)匯編言語程序設(shè)計(jì)(上上)16位匯編版本位匯編版本80 x86的操作數(shù)尋址方式有:的操作數(shù)尋址方式有:1、立刻尋址、立刻尋址2、存放器尋址、存放器尋址3、存儲(chǔ)器尋址、存儲(chǔ)器尋址4、端口尋址、端口尋址3.1 80 x86的尋址方式的尋址方式3.1.1 操作數(shù)尋址操作數(shù)尋址1、立刻尋址、立刻尋址 操作數(shù)以常量方式直接放在指令中,緊跟在操作碼之后操作數(shù)以常量方式直接放在指令中,緊跟在操作碼之后 機(jī)器碼存放方式如下:機(jī)器碼存放方式如下:立刻尋址例如立刻尋址例如 MOV AH, -40 ; -40AH MOV AX, 34D8H ; 34HAH, D8HAL MOV
2、 AX, -40 ; 0FFD8H(-40)AXOPD8操作碼操作碼8位操作數(shù)位操作數(shù)低地址低地址高地址高地址OP操作碼操作碼D16高高8位位D16低低8位位16位操作數(shù)位操作數(shù)代碼段代碼段代碼段代碼段2、存放器尋址、存放器尋址 操作數(shù)存放在某個(gè)存放器中,指令指定存放器號(hào)操作數(shù)存放在某個(gè)存放器中,指令指定存放器號(hào) 存放器號(hào)存放器號(hào)操作數(shù)操作數(shù)存放器尋址例如存放器尋址例如 MOV AH, BL ;(BL)-AH MOV DS, AX ;(AX)-DS MOV SI, AX ;(AX)-SI指令指令存放器存放器有效地址有效地址(EA)的的4種組成成分:種組成成分: 位移量位移量displaceme
3、nt 存放在指令中的存放在指令中的8位、位、16位或位或32位的數(shù),是一個(gè)地址位的數(shù),是一個(gè)地址 有效地址的計(jì)算:有效地址的計(jì)算: EA=基址基址 +變址變址*比例因子比例因子+ 位移量位移量 比例因子比例因子scale factor 32位匯編才有位匯編才有 其值可為其值可為1,2,4或或8,386及其后繼機(jī)型新添加的及其后繼機(jī)型新添加的 變址變址index 存放在變址存放器中的內(nèi)容,用于訪問數(shù)組的某個(gè)元存放在變址存放器中的內(nèi)容,用于訪問數(shù)組的某個(gè)元素素 基址基址base 存放在基址存放器中的內(nèi)容,用于指向數(shù)組的首地址存放在基址存放器中的內(nèi)容,用于指向數(shù)組的首地址四種成分四種成分16位尋址位
4、尋址位移量位移量0, 8, 16位位0, 8, 32位位基址寄存器基址寄存器BX, BP任何任何32位通用寄存器位通用寄存器(包括包括ESP)變址寄存器變址寄存器SI, DI除除ESP以外的以外的32位通用寄存器位通用寄存器比例因子比例因子 無無1, 2, 4, 81, 2, 4, 8訪存類型訪存類型 所用段及寄存器所用段及寄存器缺省選擇規(guī)則缺省選擇規(guī)則指令指令代碼段代碼段 CS用于取指用于取指堆棧堆棧堆棧段堆棧段 SSn所有的堆棧的進(jìn)棧和出棧所有的堆棧的進(jìn)棧和出棧n任何用任何用ESP或或EBP或或BP作作為基址寄存器的訪存為基址寄存器的訪存目的串目的串附加數(shù)據(jù)段附加數(shù)據(jù)段 ES串處理指令的目
5、的串串處理指令的目的串局部數(shù)據(jù)局部數(shù)據(jù)數(shù)據(jù)段數(shù)據(jù)段 DS除相對(duì)于堆棧以及串處理的除相對(duì)于堆棧以及串處理的目的串以外的所有數(shù)據(jù)訪問目的串以外的所有數(shù)據(jù)訪問1串操作指令的目的串必需用串操作指令的目的串必需用ES段段2PUSH指令的目的和指令的目的和POP指令的源必需用指令的源必需用SS段段3程序的指令必需存放在程序的指令必需存放在CS段段數(shù)據(jù)的存放比較靈敏,除了放在默許的數(shù)據(jù)的存放比較靈敏,除了放在默許的DS段,還可以段,還可以存放在別的段,此時(shí)訪問他們需求運(yùn)用段超越前綴,存放在別的段,此時(shí)訪問他們需求運(yùn)用段超越前綴,可用的段超越前綴有可用的段超越前綴有CS:, DS:, ES:, SS:, FS
6、:, GS:。3、直接尋址、直接尋址 操作數(shù)地址的偏移量操作數(shù)地址的偏移量EA在指令中在指令中段基地址段基地址EA操作數(shù)操作數(shù)+指令指令存儲(chǔ)器存儲(chǔ)器MOV AX, 2000H ; 立刻尋址立刻尋址MOV AX, 2000H ; 直接尋址直接尋址直接尋址例如直接尋址例如1 MOV AX, 1000H 物理地址物理地址 設(shè)設(shè)(DS)=10A0H 代碼段代碼段 + OP 00H 10H 數(shù)據(jù)段數(shù)據(jù)段 11A00H 30H 50H 50H 30H AX(本章中圖示存儲(chǔ)器地址從上到下遞增本章中圖示存儲(chǔ)器地址從上到下遞增低地址低地址10A00H1000H11A00H10A0H30H50H11A00H直接尋
7、址例如直接尋址例如2MOV BL, ES:0100H 物理地址物理地址 設(shè)設(shè)(ES)=3000H 30000H (DS)=2000H + 0100H 30100H 4B 00 BL4B在匯編言語指令中,可以用符號(hào)地址替代數(shù)值地址在匯編言語指令中,可以用符號(hào)地址替代數(shù)值地址如:如:MOV AX, BUFF或或 MOV AX, BUFF其中其中BUFF為存放數(shù)據(jù)單元的符號(hào)地址。為存放數(shù)據(jù)單元的符號(hào)地址。3000H30100H30100H4B4、存放器間接尋址、存放器間接尋址 操作數(shù)在存儲(chǔ)器中,操作數(shù)地址的偏移量操作數(shù)在存儲(chǔ)器中,操作數(shù)地址的偏移量EA在存放器中在存放器中EA操作數(shù)操作數(shù)+存儲(chǔ)器存儲(chǔ)
8、器指令指令存放器存放器段基地址段基地址存放器間接尋址例如存放器間接尋址例如 MOV AL, BX MOV AX, CS:SI MOV BP, AH MOV AH, BPMOV BX, SIMOV CX, SI設(shè)設(shè) (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址物理地址 物理地址物理地址 10000H 20000H + 0B10H + 032AH 40H 00H 3EH 46H40H AH10B10H2032AH463EH BX2032BH10B11H SI032AH032AH1000H2000H0B10H032AH10B10H10B10
9、H2032AH2032AH40H3EH46032AH5、基址尋址、基址尋址 操作數(shù)的有效地址是基址存放器的內(nèi)容加上指令操作數(shù)的有效地址是基址存放器的內(nèi)容加上指令中指定的位移量中指定的位移量地址地址+操作數(shù)操作數(shù)指指 令令基址存放器基址存放器段基地址段基地址存儲(chǔ)器存儲(chǔ)器EA基址尋址例如基址尋址例如 MOV AX, 3000HBX (或或BX+3000H) MOV AX, COUNTBX ; COUNT是符號(hào)地址是符號(hào)地址 或或 MOV AX,COUNT+BX 假設(shè)假設(shè)(DS)=3000H, (BX)=2000H,COUNT=4000H 30000H 2000H + 4000H 1234H3600
10、0H 34H 12HAX3000H2000H4000H36000H36000H34H12 6、變址尋址、變址尋址 地址地址+操作數(shù)操作數(shù)指指 令令變址存放器變址存放器段基地址段基地址存儲(chǔ)器存儲(chǔ)器EA變址尋址例如變址尋址例如 MOV CX, 6020HSI (或或SI+6020H) MOV DX, COUNTSI ; COUNT是符號(hào)地址是符號(hào)地址 或或 MOV AX,COUNT+SI 假設(shè)假設(shè)(DS)=3000H, (SI)=2000H,COUNT=1000H 30000H 2000H + 1000H 6734H33000H 34H 67HDX3000H2000H1000H33000H3300
11、0H34H67 7、基址變址尋址、基址變址尋址1無位移量的基址變址尋址無位移量的基址變址尋址 操作數(shù)的有效地址是一個(gè)基址存放器和一個(gè)變址存操作數(shù)的有效地址是一個(gè)基址存放器和一個(gè)變址存放器的內(nèi)容之和放器的內(nèi)容之和變址值變址值基址值基址值+操作數(shù)操作數(shù)指指 令令變址存放器變址存放器基址存放器基址存放器段基地址段基地址存儲(chǔ)器存儲(chǔ)器EA無位移量基址變址尋址例如無位移量基址變址尋址例如 MOV AX, BX+DI MOV AX, BXDI 假設(shè)假設(shè) (DS)=2100H, (BX)=0158H, (DI)=10A5H,物理地址物理地址 21000H 0158H+ 10A5H 221FDH 34H 12H
12、1234HAX2100H0158H10A5H221FDH221FDH34H122基址變址相對(duì)尋址基址變址相對(duì)尋址 操作數(shù)的有效地址是一個(gè)基址存放器的內(nèi)容、操作數(shù)的有效地址是一個(gè)基址存放器的內(nèi)容、一個(gè)變址存放器的內(nèi)容及位移量之和一個(gè)變址存放器的內(nèi)容及位移量之和 變址值變址值基址值基址值+操作數(shù)操作數(shù)指指 令令變址存放器變址存放器基址存放器基址存放器段基地址段基地址存儲(chǔ)器存儲(chǔ)器EA基址變址相對(duì)尋址例如基址變址相對(duì)尋址例如 MOV AX, MASKBX+SI;MASK是符號(hào)地址是符號(hào)地址 假設(shè)假設(shè) (DS)=3000H, (BX)=2000H, (SI)=1000H, MASK=0250H 物理地址
13、物理地址 30000H 2000H 1000H + 0250H 33250H 20H 43H 4320H AX3000H2000H1000H0250H33250H33250H20H438、端口尋址、端口尋址1直接尋址直接尋址I/O Port Direct Addressing直接尋址是運(yùn)用一字節(jié)立刻數(shù)尋址,因此直接尋址是運(yùn)用一字節(jié)立刻數(shù)尋址,因此I/O端口的端口的尋址范圍為尋址范圍為00HFFH,最多為,最多為256個(gè)。個(gè)。 2間接尋址間接尋址I/O Port Indirect Addressing 間接尋址由間接尋址由DX存放器間接給出存放器間接給出I/O端口地址,為兩個(gè)端口地址,為兩個(gè)字節(jié)
14、,所以最多可尋址字節(jié),所以最多可尋址216=64K個(gè)端口地址。個(gè)端口地址。 MOVDX, 3FCHINAL, DX;從;從3FCH端口讀入端口讀入1個(gè)字節(jié)個(gè)字節(jié)3.1.2 轉(zhuǎn)移操作尋址轉(zhuǎn)移操作尋址段內(nèi)直接尋址段內(nèi)直接尋址轉(zhuǎn)向的有效地址是當(dāng)前轉(zhuǎn)向的有效地址是當(dāng)前IP/EIP存放器的內(nèi)容和指令存放器的內(nèi)容和指令中指定的位移量之和。位移量在條件轉(zhuǎn)移以及短轉(zhuǎn)移中指定的位移量之和。位移量在條件轉(zhuǎn)移以及短轉(zhuǎn)移中只需中只需8位,其它情況下為位,其它情況下為16位。位。 偏移量偏移量機(jī)器碼機(jī)器碼程序程序00000405PROG_S: ADD AL,05H000290 NOP0003EBFB JMP SHORT
15、 PROG_S000590 NOP段內(nèi)間接尋址段內(nèi)間接尋址轉(zhuǎn)向有效地址是一個(gè)存放器或是一個(gè)存儲(chǔ)單元的內(nèi)轉(zhuǎn)向有效地址是一個(gè)存放器或是一個(gè)存儲(chǔ)單元的內(nèi)容容 。所得到的轉(zhuǎn)向的有效地址用來取代。所得到的轉(zhuǎn)向的有效地址用來取代IP/EIP存放器存放器的內(nèi)容。的內(nèi)容。 設(shè):設(shè):DS=2000H,BX=1000H,變量,變量TABLE的有效地址為的有效地址為1000H,21000H=0040H,22000H=5678H,那么以下三條指令分別執(zhí)行后結(jié)果如下:,那么以下三條指令分別執(zhí)行后結(jié)果如下: JMP BX;執(zhí)行后;執(zhí)行后IP=1000H JMP BX ;執(zhí)行后;執(zhí)行后IP=0040H JMP TABLEB
16、X ;執(zhí)行后;執(zhí)行后IP=5678H段間直接尋址段間直接尋址指令中直接提供了轉(zhuǎn)向段地址和偏移地址,用指令指令中直接提供了轉(zhuǎn)向段地址和偏移地址,用指令中提供的偏移地址取代中提供的偏移地址取代IP/EIP存放器,用指令中提供存放器,用指令中提供的段地址取代的段地址取代CS存放器的內(nèi)容就完成從一個(gè)段到另一存放器的內(nèi)容就完成從一個(gè)段到另一個(gè)段的轉(zhuǎn)移操作。個(gè)段的轉(zhuǎn)移操作。 JMP FAR PTR NEXT_PRO段間間接尋址段間間接尋址用存儲(chǔ)器中的相繼字的內(nèi)容來取代用存儲(chǔ)器中的相繼字的內(nèi)容來取代IP/EIP和和CS存放器存放器中的原始內(nèi)容以到達(dá)段間轉(zhuǎn)移的目的。中的原始內(nèi)容以到達(dá)段間轉(zhuǎn)移的目的。 設(shè):設(shè):
17、(DS)=2500H,(SI)=1300H,(26300H)=4500H,(26302H)=32F0H, 那么執(zhí)行以下指令后結(jié)果如下:那么執(zhí)行以下指令后結(jié)果如下:JMP DWORD PTR SI;執(zhí)行后;執(zhí)行后CS=32F0H,IP=4500H3.2 80 x86的指令系統(tǒng)的指令系統(tǒng)n數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令n算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令n邏輯運(yùn)算與移位指令邏輯運(yùn)算與移位指令n串操作指令串操作指令n控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令n處置器控制指令處置器控制指令3.2.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令 地址傳送指令地址傳送指令 標(biāo)志存放器傳送指令標(biāo)志存放器傳送指令 輸入輸出指令輸
18、入輸出指令 類型轉(zhuǎn)換指令類型轉(zhuǎn)換指令1、通用數(shù)據(jù)傳送指、通用數(shù)據(jù)傳送指令令PUSH(push onto the stack) 進(jìn)棧進(jìn)棧POP(pop from the stack) 出棧出棧XCHG(exchange) 交換交換XLAT(translate) 換碼換碼存儲(chǔ)器存儲(chǔ)器段存放器段存放器CS DS SS ES立刻數(shù)立刻數(shù)通用存放器通用存放器AX BX CX DXBP SP SI DIMOV指令例如指令例如1MOV VALUE, 100H ;立刻數(shù)傳送到存儲(chǔ)單元;立刻數(shù)傳送到存儲(chǔ)單元MOV ES:BX, 4BHMOV AL, BL ;存放器之間傳送;存放器之間傳送MOV BP, SIMO
19、V指令例如指令例如2 MOV AX, ARRAYSI設(shè)設(shè)(DS)=3000H, (SI)=2000H, ARRAY=8000H 物理地址物理地址 30000H 2000H + 8000H 3A000H 3A000H 45H 0BH0B45H AXMOV指令本卷須知:指令本卷須知:闡明:闡明:1) 源操作數(shù)可以是存放器或存儲(chǔ)器操作數(shù)源操作數(shù)可以是存放器或存儲(chǔ)器操作數(shù) 2) 必需以字或雙字為單位操作必需以字或雙字為單位操作 3) 32位指令允許位指令允許SRC是是16位或位或32位立刻數(shù),位立刻數(shù),也允許是也允許是32位存放器和存儲(chǔ)器操作數(shù)位存放器和存儲(chǔ)器操作數(shù)舉例:舉例:PUSH AX PUSH
20、 DATBXSI PUSH 1234H PUSH 87654321H PUSH EAX 壓棧指令例如壓棧指令例如 PUSH AX 執(zhí)行前執(zhí)行前 AX AX 25H 31H SP 52500H 3125H3125H低地址低地址低地址低地址進(jìn)棧方向進(jìn)棧方向SP3125H524FEH524FFH52500H執(zhí)行后執(zhí)行后舉例:舉例:POP AX POP DATBXSI POP DS POP ECX出棧指令例如出棧指令例如 POP BX 執(zhí)行前執(zhí)行前 執(zhí)行后執(zhí)行后 BX BX 75C1H 低地址低地址 低地址低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2
21、H 9Ah 2H 28h 3H 28h 3H出棧方向出棧方向48h48h6BhSP操作:操作:PUSHA指令例如指令例如(DI) -16(SI) -14(BP) -12(SP)原原 -10(BX) -8(DX) -6(CX) -4(AX) -2 0(SP)原原(SP)執(zhí)行前執(zhí)行前執(zhí)行后執(zhí)行后操作:操作:闡明:闡明: 1操作數(shù)不允許為段存放器操作數(shù)不允許為段存放器 2兩個(gè)操作數(shù)長(zhǎng)度必需一樣兩個(gè)操作數(shù)長(zhǎng)度必需一樣 3本指令不影響形狀標(biāo)志位本指令不影響形狀標(biāo)志位 4兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)如:如: XCHG AX, BX ;存放器之間交換;存放器之間交換 XC
22、HG BX, BP+DI ;存放器與存儲(chǔ)器之間交換;存放器與存儲(chǔ)器之間交換 XCHG SI, DX交換指令例如交換指令例如 XCHG DX, DATABP設(shè)設(shè)(SS)=5000H, (BP)=0400H, DATA=1800H 物理地址物理地址=5000H16+0400H+1800H=51C00H 執(zhí)行前執(zhí)行前 執(zhí)行后執(zhí)行后 DX DX 37CDH 51C00H 42H 51C00H 1H 6DH 1H CDH37H6D42H +6 36H +7 37H 34HAL LDS (load DS with pointer) 指針?biāo)痛娣牌骱椭羔標(biāo)痛娣牌骱虳S LES (load ES with po
23、inter) 指針?biāo)痛娣牌骱椭羔標(biāo)痛娣牌骱虴S LFS (load FS with pointer) 指針?biāo)痛娣牌骱椭羔標(biāo)痛娣牌骱虵S LGS (load GS with pointer) 指針?biāo)痛娣牌骱椭羔標(biāo)痛娣牌骱虶S LSS (load SS with pointer) 指針?biāo)痛娣牌骱椭羔標(biāo)痛娣牌骱蚐S2、地址傳送指令、地址傳送指令LEA指令例如指令例如設(shè)設(shè)(DS)=2000H, (BX)=1234H LEA DI, BX MOV SI, BX 執(zhí)行后執(zhí)行后 執(zhí)行后執(zhí)行后 21234H 78H 5H 56H1234H1234HBXSI5678HSI78H1234H565678H78H56
24、21234H5HBUFFERSI1234HSI執(zhí)行后執(zhí)行后執(zhí)行后執(zhí)行后1234H78H56LES 、LFS、LGS、LSS 格式:同格式:同LDS,目的分別是,目的分別是ES,F(xiàn)S,GS,和,和SS存放器存放器 闡明:闡明: 1) 源操作數(shù)必需是存儲(chǔ)器操作數(shù)源操作數(shù)必需是存儲(chǔ)器操作數(shù) 2) 目的操作數(shù)必需是存放器目的操作數(shù)必需是存放器 3) 完成一個(gè)邏輯地址的傳送,該邏輯地址完成一個(gè)邏輯地址的傳送,該邏輯地址須用偽指令預(yù)先定義在當(dāng)前數(shù)據(jù)段中須用偽指令預(yù)先定義在當(dāng)前數(shù)據(jù)段中7659H2000HH 45HH D6HH 00HH 50H D645H5000HDSDIDI DSLDS指令例如指令例如
25、LDS DI, BX設(shè)設(shè)(DS)=2000H, (BX)=1000H執(zhí)行前執(zhí)行前執(zhí)行后執(zhí)行后LEA與與LDS的區(qū)別的區(qū)別LEA SI, BUFFLDS DI, BUFFBUFF(21000H) 45H +1 D6H +2 00H +3 50H 設(shè)設(shè)(DS)=2000HEABUFF=1000H執(zhí)行后:執(zhí)行后:SI=1000HDI=D645HDS=5000H3、標(biāo)志存放器傳送指令、標(biāo)志存放器傳送指令PUSHF/PUSHFD(push the flags or eflags) 標(biāo)志進(jìn)棧標(biāo)志進(jìn)棧POPF/POPFD(pop the flags or eflags) 標(biāo)志出棧標(biāo)志出棧闡明:闡明:1) 無
26、操作數(shù)無操作數(shù) 2) FLAGS中含假設(shè)干標(biāo)志位,但中含假設(shè)干標(biāo)志位,但LAHF指令本指令本身不影響標(biāo)志位身不影響標(biāo)志位闡明:無操作數(shù)闡明:無操作數(shù)4、輸入輸出指令、輸入輸出指令 IN(input) 輸入輸入 OUT(output) 輸出輸出闡明:用闡明:用Port指明指明8位端口地址時(shí),地址范圍為位端口地址時(shí),地址范圍為00H-FFH 以以DX間接給出端口地址時(shí),最大地址為間接給出端口地址時(shí),最大地址為0FFFFH操作:操作: AL/AX/EAX-(Port) 從外設(shè)讀入字節(jié)或字或雙字?jǐn)?shù)據(jù)從外設(shè)讀入字節(jié)或字或雙字?jǐn)?shù)據(jù) AL/AX/EAXAL IN AX, 48H ;從端口;從端口48H讀入字
27、數(shù)據(jù)讀入字?jǐn)?shù)據(jù)-AX MOV DX, 3FCH IN EAX, DX ;從端口;從端口03FCH讀入雙字?jǐn)?shù)讀入雙字?jǐn)?shù)-EAXOUT指令例如指令例如 OUT 32H, AX ;傳送字?jǐn)?shù)據(jù)到;傳送字?jǐn)?shù)據(jù)到32H端口端口 MOV DX,400H MOV AL, 86H OUT DX, AL ;傳送字節(jié)數(shù)據(jù)到;傳送字節(jié)數(shù)據(jù)到DX指出的端口指出的端口5、類型轉(zhuǎn)換指令、類型轉(zhuǎn)換指令闡明:闡明: 用于在符號(hào)數(shù)除之前,構(gòu)成雙倍長(zhǎng)度的被除用于在符號(hào)數(shù)除之前,構(gòu)成雙倍長(zhǎng)度的被除數(shù)數(shù)6、POP 指令不允許運(yùn)用立刻數(shù)尋址方式,指令不允許運(yùn)用立刻數(shù)尋址方式, 不允許運(yùn)用不允許運(yùn)用CS存放器存放器 例:例: POP 12
28、 ;不合法;不合法 POP CS ;不合法;不合法7、段存放器只能在、段存放器只能在MOV、PUSH、POP 指令中作為操作數(shù)出現(xiàn)指令中作為操作數(shù)出現(xiàn) 例:例:MOV ES, AX PUSH CS POP DS 但以下指令不合法:但以下指令不合法: MOV CS, reg POP CS8、指令有多種格式,普通都遵照以下規(guī)那么:、指令有多種格式,普通都遵照以下規(guī)那么:雙操作數(shù)指令中不允許兩個(gè)操作數(shù)均為存儲(chǔ)器操作數(shù)雙操作數(shù)指令中不允許兩個(gè)操作數(shù)均為存儲(chǔ)器操作數(shù)單操作數(shù)指令不允許立刻尋址方式單操作數(shù)指令不允許立刻尋址方式目的操作數(shù)不允許運(yùn)用立刻尋址方式目的操作數(shù)不允許運(yùn)用立刻尋址方式3.2.2 算術(shù)
29、運(yùn)算指令算術(shù)運(yùn)算指令1、無符號(hào)二進(jìn)制數(shù)、無符號(hào)二進(jìn)制數(shù) 字節(jié)可表示范圍:字節(jié)可表示范圍:0-255 字可表示范圍:字可表示范圍:0-655352、有符號(hào)二進(jìn)制數(shù)、有符號(hào)二進(jìn)制數(shù) 字節(jié)可表示范圍:字節(jié)可表示范圍:-128-+127 字可表示范圍:字可表示范圍:-32768-+327673、非緊縮十進(jìn)制數(shù)、非緊縮十進(jìn)制數(shù) 一個(gè)字節(jié)存放一位十制進(jìn)數(shù)的一個(gè)字節(jié)存放一位十制進(jìn)數(shù)的BCD 碼,高碼,高4位為位為0000。 例:十進(jìn)數(shù)例:十進(jìn)數(shù)57表示為:表示為: 00000101 00000111 0507H)4、緊縮十進(jìn)制數(shù)、緊縮十進(jìn)制數(shù) 一個(gè)字節(jié)存放兩位十進(jìn)制數(shù)的一個(gè)字節(jié)存放兩位十進(jìn)制數(shù)的 BCD碼碼
30、 例:十進(jìn)數(shù)例:十進(jìn)數(shù)57表示為:表示為: 01010111 57H以以8位數(shù)加法為例討論溢出位數(shù)加法為例討論溢出1、無符號(hào)數(shù),有符號(hào)數(shù)都不溢出、無符號(hào)數(shù),有符號(hào)數(shù)都不溢出 無符號(hào)數(shù)無符號(hào)數(shù) 有符號(hào)數(shù)有符號(hào)數(shù) 04H 4 4 +0BH + 11 + 11 0FH 15 15 CF=0 OF=02、無符號(hào)數(shù)溢出,有符號(hào)數(shù)不溢出、無符號(hào)數(shù)溢出,有符號(hào)數(shù)不溢出 無符號(hào)數(shù)無符號(hào)數(shù) 有符號(hào)有符號(hào)數(shù)數(shù) 07H 7 7 +FBH +251 +(-5) 1 02H 258 +2 (255) CF=1 OF=0指令構(gòu)成方式:指令構(gòu)成方式:ADD reg,imme ;存放器與立刻數(shù)相加;存放器與立刻數(shù)相加ADD
31、reg,reg ;存放器之間;存放器之間ADD reg,mem ;存放器加存儲(chǔ)器操作數(shù);存放器加存儲(chǔ)器操作數(shù)ADD mem,imme ;存儲(chǔ)器加立刻數(shù);存儲(chǔ)器加立刻數(shù)ADD mem,reg ;存儲(chǔ)器操作數(shù)加存放器;存儲(chǔ)器操作數(shù)加存放器 闡明:運(yùn)轉(zhuǎn)結(jié)果對(duì)闡明:運(yùn)轉(zhuǎn)結(jié)果對(duì)CF、SF、OF、PF、ZF、AF都會(huì)都會(huì)影響影響ADD指令例如指令例如1 ADD DX, BX 設(shè)設(shè)(DX)=4652H, (BX)=0F0F0H 4652H+ F0F0H1 3742H 0100 0110 0101 0010+ 1111 0000 1111 00001 0011 0111 0100 0010進(jìn)位進(jìn)位進(jìn)位進(jìn)位執(zhí)行
32、后執(zhí)行后 (DX)=3742H ZF=0 結(jié)果不為結(jié)果不為0 SF=0 結(jié)果為正結(jié)果為正 CF=1 有進(jìn)位有進(jìn)位 OF=0 不溢出不溢出ADD指令例如指令例如2 ADD WORD PTRBX, 9F76H 設(shè)設(shè)(DS)=2000H, (BX)=1000H 執(zhí)行前:執(zhí)行前: 21000 88H A988H A9H + 9F76H 1 48FEH 執(zhí)行后:執(zhí)行后: 21000 FEH CF=1 有進(jìn)位有進(jìn)位 48H OF=1 溢出溢出 ZF=0 結(jié)果不為結(jié)果不為0 SF=0 結(jié)果為正結(jié)果為正進(jìn)位進(jìn)位ADC指令例如指令例如雙字加法雙字加法 設(shè)設(shè)32位的目的操作數(shù)存放在位的目的操作數(shù)存放在DX和和AX
33、中,中,DX存放高位字,存放高位字,32位源操作數(shù)存放在位源操作數(shù)存放在BX和和CX中,中,BX存放高位字存放高位字 CF ADC ADDDXAXBXCXDXAX +指令序列為:指令序列為: ADD AX, CX ;低位加;低位加 ADC DX, BX ;高位加;高位加 執(zhí)行前執(zhí)行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H 0418H DX 0F365H AX 1005H BX + 0E024H CX + 1 CF 141EH DX 1D389H AX CF=1如:如:DX:AX=37A1FFFFH, 那么那么DX:AX1能否用能否用: I
34、NC AX ADC DX,0來實(shí)現(xiàn)?來實(shí)現(xiàn)?INC指令例如指令例如LEA BX, ARRAYMOV AL, BX INC BXARRAY a1 +1 a2 +2 a3 +3 a4 MOV BX, 0MOV AL, ARRAYBX INC BX 8088中,執(zhí)行中,執(zhí)行INC BYTE PTRBX指令指令已在指令指令已在指令隊(duì)列中需求指令隊(duì)列中需求 個(gè)總線周期。個(gè)總線周期。 指令構(gòu)成如下:指令構(gòu)成如下: SUB reg, imme ;存放器減立刻數(shù);存放器減立刻數(shù) SUB reg, reg ;存放器之間相減;存放器之間相減 SUB reg, mem ;存放器減存儲(chǔ)器操作數(shù);存放器減存儲(chǔ)器操作數(shù)
35、SUB mem, imme ;存儲(chǔ)器操作數(shù)減立刻數(shù);存儲(chǔ)器操作數(shù)減立刻數(shù) SUB mem, reg ;存儲(chǔ)器操作數(shù)減存放器;存儲(chǔ)器操作數(shù)減存放器闡明:運(yùn)轉(zhuǎn)結(jié)果對(duì)闡明:運(yùn)轉(zhuǎn)結(jié)果對(duì)CF、SF、OF、PF、ZF、AF都會(huì)影響都會(huì)影響SUB指令例如指令例如 SUB BX, CX 執(zhí)行前:執(zhí)行前: (BX)=9543H (CX)=28A7H 9543H - 28A7H 6C9CH 執(zhí)行后:執(zhí)行后: (BX)=6C9CH CF=0 OF=1 ZF=0 SF=0 0001HCF=1NEG指令例如指令例如1 NEG DX 執(zhí)行前:執(zhí)行前: (DX)=6780H 0000 - 6780 1 9880 執(zhí)行后:執(zhí)
36、行后: (DX)=9880H CF=1NEG指令例如指令例如2 NEG AL ;AL求補(bǔ)求補(bǔ) ADD AL, 100 ;(AL)+100-AL 實(shí)現(xiàn)的功能為:實(shí)現(xiàn)的功能為: 100-(AL)借位借位1、兩個(gè)操作數(shù)相減,但結(jié)果不回送、兩個(gè)操作數(shù)相減,但結(jié)果不回送2、影響標(biāo)志位的值,下一指令常是條件轉(zhuǎn)移指令、影響標(biāo)志位的值,下一指令常是條件轉(zhuǎn)移指令3、必需區(qū)分無符號(hào)數(shù)比較與有符號(hào)數(shù)比較、必需區(qū)分無符號(hào)數(shù)比較與有符號(hào)數(shù)比較 如如 比較比較 11111111B 與與 00000000B 無符號(hào)數(shù)比較:無符號(hào)數(shù)比較: 255 0 有符號(hào)數(shù)比較:有符號(hào)數(shù)比較: -1 04、比較兩數(shù)能否相等,根據(jù)標(biāo)志位、比
37、較兩數(shù)能否相等,根據(jù)標(biāo)志位ZF判別判別 假設(shè)相等,那么假設(shè)相等,那么ZF=1;否那么;否那么ZF=0 5、指令構(gòu)成同、指令構(gòu)成同SUB指令指令比較兩數(shù)的大小比較兩數(shù)的大小 CMP DST, SRC1、無符號(hào)數(shù)比較、無符號(hào)數(shù)比較 DSTSRC DST0, SRC0 必不溢出必不溢出,OF=0 DST=5AH, SRC=46H DST=46H, SRC=5AH 5AH 46H - 46H - 5AH 14H ECH SF=0, DSTSRC SF=1, DST0, SRCSRC DST=10H SRC=95H DST=62H SRC=95H 10H 62H - 95H - 95H 7BH CDH
38、SF=0, OF=0 SF=1, OF=1 CMP指令例如指令例如1 CMP AL, BL 令令 (AL)= -64 (BL)=10 - 64 - 10 - 74 OF=0 SF=1 結(jié)論:結(jié)論: (DST)(SRC) CMPXCHG指令例如指令例如 CMPXCHG CX, DX 闡明:闡明: 1SRC可用存放器或存儲(chǔ)器尋址方式可用存放器或存儲(chǔ)器尋址方式 2無符號(hào)數(shù)乘與有符號(hào)數(shù)乘不同無符號(hào)數(shù)乘與有符號(hào)數(shù)乘不同 如如 11111111B11111111B 無符號(hào)數(shù)乘:無符號(hào)數(shù)乘: 255255 有符號(hào)數(shù)乘:有符號(hào)數(shù)乘: -1-1 3本指令影響標(biāo)志位本指令影響標(biāo)志位CF和和OFMUL, IMUL指
39、令例如指令例如 MUL BL (AL)=0B4H=180 (BL)=11H=17 1011 0100 0001 0001 1011 0100 1011 0100 101111110100(AX)=0BF4H=3060 0100 1100 0001 0001 0100 11000111 11000101 0000 1100(AX)=(-050C)補(bǔ)補(bǔ) =FAF4H= -1292闡明:闡明:1乘積的字長(zhǎng)和源、目的操作數(shù)的字長(zhǎng)一致乘積的字長(zhǎng)和源、目的操作數(shù)的字長(zhǎng)一致 2能夠溢出能夠溢出 3SRC可用存放器或存儲(chǔ)器尋址方式可用存放器或存儲(chǔ)器尋址方式 REG只能是存放器尋址方式只能是存放器尋址方式 IM
40、M是立刻數(shù)是立刻數(shù) 4這些指令是這些指令是80186后新添加的后新添加的闡明:闡明: 1) 被除數(shù)的長(zhǎng)度是指令中操作數(shù)的兩倍被除數(shù)的長(zhǎng)度是指令中操作數(shù)的兩倍 2) 源操作數(shù)可用除立刻數(shù)以外的尋址方式源操作數(shù)可用除立刻數(shù)以外的尋址方式 3) 假設(shè)假設(shè)SRC=0或者商大于存放商的存放器的最大數(shù)值或者商大于存放商的存放器的最大數(shù)值范圍,都會(huì)引發(fā)范圍,都會(huì)引發(fā)“Divide error錯(cuò)誤。因此,當(dāng)被錯(cuò)誤。因此,當(dāng)被除數(shù)為除數(shù)為AX, DX:AX時(shí),商最大是時(shí),商最大是255和和65535DIV指令例如指令例如 MOV AX, 0000H ;裝入被除數(shù);裝入被除數(shù) 10000H MOV DX, 000
41、1H MOV BX, 100H ;裝入除數(shù);裝入除數(shù) DIV BX ;10000H/100H MOV N1, AX ;存商;存商 MOV N2, DX ;存余數(shù);存余數(shù)IDIV指令例如指令例如 計(jì)算計(jì)算-127/15,商存入,商存入RESULT單元單元 MOV AL, -127 ;裝入被除數(shù);裝入被除數(shù)81H CBW ;字節(jié)擴(kuò)展到字;字節(jié)擴(kuò)展到字 MOV BL, 15 ;裝入除數(shù);裝入除數(shù) IDIV BL ;-127/15 MOV RESULT, AL ;存商;存商算術(shù)運(yùn)算指令綜合例算術(shù)運(yùn)算指令綜合例 計(jì)算計(jì)算(V-(X*Y+Z)/X,其中,其中X,Y,Z,V均為均為16位有符號(hào)數(shù),位有符號(hào)數(shù)
42、,要求商存入要求商存入AX,余數(shù)存入,余數(shù)存入DX MOV AX, X IMUL Y ; X*Y MOV CX, AX MOV BX, DX ;積存;積存 BX, CX MOV AX, Z CWD ;Z擴(kuò)展擴(kuò)展 ADD CX, AX ;X*Y+Z ADC BX, DX MOV AX, V CWD ;V擴(kuò)展擴(kuò)展 SUB AX, CX ;相減;相減 SBB DX, BX IDIV X ;除以;除以X 十進(jìn)制十進(jìn)制BCD碼運(yùn)算調(diào)整指令碼運(yùn)算調(diào)整指令為什么需求調(diào)整?為什么需求調(diào)整?BCD碼的碼的10101111是無意義的。是無意義的。例:非緊縮十進(jìn)數(shù)例:非緊縮十進(jìn)數(shù)6和和7相加相加 0000 0110
43、 + 0000 0111 0000 1101 + 110 ;調(diào)整;調(diào)整 0001 0011 調(diào)整指令有兩類:調(diào)整指令有兩類:1、非緊縮、非緊縮BCD碼調(diào)整指令碼調(diào)整指令 AAA AAS AAM AAD2、緊縮、緊縮BCD碼調(diào)整指令碼調(diào)整指令 DAA DAS調(diào)整過程:調(diào)整過程: 假設(shè)假設(shè) (AL&0FH)9 或或 (AF)=1 那么那么 (AL)+6-AL (AH)+1-AH 1-AF, AF-CF (AL)&0FH-AL 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF闡明:闡明: 該指令放在二進(jìn)制加法指令該指令放在二進(jìn)制加法指令A(yù)DD之后之后 AAA指
44、令例如指令例如 計(jì)算十進(jìn)制數(shù)計(jì)算十進(jìn)制數(shù)9+4 MOV AL, 9H 09H MOV BL, 4H + 04H ADD AL, BL 0DH ;9 AAA + 06 H ;調(diào)整;調(diào)整 13H & 0FH 03H (AH)+ 1-AH結(jié)果:結(jié)果: (AH)=01H (AL)=03H CF=AF=1 AAA指令例如指令例如 計(jì)算十進(jìn)制數(shù)計(jì)算十進(jìn)制數(shù)9+9 MOV AL, 9H 09H MOV BL, 9H + 09H ADD AL, BL 12H ;AF=1 AAA + 06 H ;調(diào)整;調(diào)整 18H & 0FH 08H (AH)+ 1-AH結(jié)果:結(jié)果: (AH)=01H (AL)
45、=08H CF=AF=1 調(diào)整過程:調(diào)整過程: 假設(shè)假設(shè) (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL (AH)-1-AH (AL)&0FH-AL 1-AF, AF-CF 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF AAS指令例如指令例如 計(jì)算十進(jìn)制數(shù)計(jì)算十進(jìn)制數(shù)16-7 MOV AX, 0106H 06H MOV BL, 7H - 07H SUB AL, BL FFH ; (AL)&0FH9 AAS - 6 H ;調(diào)整;調(diào)整 F9H & 0FH 09H (AH)-1-AH結(jié)果:結(jié)果: (AL)=09H CF
46、=AF=1 (AH)=00H調(diào)整后,調(diào)整后,(AH)=6 (AL)=3AAD指令例如指令例如 MOV AX, 0208H ;AX9 或或 (AF)=1 那么那么(AL)+6-AL 1-AF 假設(shè)假設(shè)(AL)9FH 或或 (CF)=1 那么那么(AL)+60H-AL 1-CF DAA指令例如指令例如1 計(jì)算十進(jìn)制數(shù)計(jì)算十進(jìn)制數(shù)29+18 MOV AL, 29H 29H MOV BL, 18H + 18H ADD AL, BL 41H ;AF=1 DAA + 6 ; 調(diào)整調(diào)整 47HDAA指令例如指令例如2 計(jì)算十進(jìn)制數(shù)計(jì)算十進(jìn)制數(shù)54+63 MOV AL, 54H 54H MOV BL, 63H
47、 + 63H ADD AL, BL B7 H ;9F DAA + 60H ; 調(diào)整調(diào)整 1 17H調(diào)整過程:調(diào)整過程: 假設(shè)假設(shè) (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL 1-AF 假設(shè)假設(shè)(AL)9FH 或或 (CF)=1 那么那么 (AL)-60H-AL 1-CFDAS指令例如指令例如 計(jì)算十進(jìn)數(shù)計(jì)算十進(jìn)數(shù)A-B A=4612 B=3576 MOV AL, A 12H SUB AL, B - 76H DAS 1 9CH ;AF,CF均均1 MOV D, AL - 66H ;所以用;所以用-66H調(diào)整調(diào)整 MOV AL, A+1 36H D SBB AL,
48、 B+1 CF=1 DAS MOV D+1, AL 46H 35H - 1 10H D+1結(jié)果結(jié)果10363.2.3 邏輯運(yùn)算指令邏輯運(yùn)算指令n邏輯非指令邏輯非指令 NOT n邏輯與指令邏輯與指令 ANDn邏輯或指令邏輯或指令 ORn邏輯異或指令邏輯異或指令 XORn測(cè)試指令測(cè)試指令 TESTNOT指令例如指令例如2 MOV AL, 1 ;1-AL NOT AL ;求反;求反 INC AL ;NOT指令例如指令例如1 MOV AL, 52H NOT AL 執(zhí)行前執(zhí)行前 AL 01010010 執(zhí)行后執(zhí)行后 AL 10101101 -1-ALOF=0AND指令例如指令例如1 MOV AL , 3
49、2H AND AL, 0FH ;屏蔽高四位操作;屏蔽高四位操作 執(zhí)行前執(zhí)行前 AL 00110010 2的的ASCII碼碼 執(zhí)行后執(zhí)行后 AL 00000010 AND指令例如指令例如2 AND AX, AX 執(zhí)行后執(zhí)行后 AX內(nèi)容不變,內(nèi)容不變, CF=0OF=0OR指令例如指令例如1 MOV AL, 02H OR AL, 0F0H ; 高四位置位高四位置位 執(zhí)行前執(zhí)行前 AL 00000010 執(zhí)行后執(zhí)行后 AL 11110010 OR指令例如指令例如2 MOV AL, 02H OR AL, 30H 執(zhí)行前執(zhí)行前 AL 00000010 執(zhí)行后執(zhí)行后 AL 00110010 ;2的的ASC
50、II碼碼 XOR指令例如指令例如1 MOV AL, 0B6H 1011 0110 XOR AL, 0FH 0000 1111 1011 1001 不變不變 變反變反XOR指令例如指令例如2 XOR AL, AL ;清零操作,且;清零操作,且CF=0指令指令時(shí)鐘數(shù)時(shí)鐘數(shù)指令字指令字節(jié)數(shù)節(jié)數(shù)8088 286386 486 PentiumMOV AX, 0432112AND AX, 0432113XOR AX, AX322112SUB AX, AX322113MOV BL, 0MUL BL432112143213842113OF=0 TEST指令例如指令例如1 測(cè)試測(cè)試AL最低位能否為最低位能否為1
51、,假設(shè)是,假設(shè)是1那么那么轉(zhuǎn)移轉(zhuǎn)移 TEST AL, 01H JNZ NEXT ;ZF=0轉(zhuǎn)轉(zhuǎn)TEST指令例如指令例如2 測(cè)試測(cè)試AX最高位能否為最高位能否為1,假設(shè)不是,假設(shè)不是1那么轉(zhuǎn)移那么轉(zhuǎn)移 TEST AX, 8000H JZ THERE ;ZF=1轉(zhuǎn)轉(zhuǎn)3.2.4 移位指令移位指令移位指令有移位指令有10條,分三類:條,分三類:1、移位指令:、移位指令:SHL邏輯左移邏輯左移 SHR邏輯右移邏輯右移 SAL算術(shù)左移算術(shù)左移 SAR算術(shù)右移算術(shù)右移2、循環(huán)移位指令:、循環(huán)移位指令:ROL循環(huán)左移循環(huán)左移 ROR循環(huán)右移循環(huán)右移 RCL帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCR帶進(jìn)位循環(huán)右移帶進(jìn)
52、位循環(huán)右移3、雙精度移位指令:、雙精度移位指令:SHLD雙精度左移雙精度左移 SHRD雙精度右移雙精度右移 SHL/SAL邏輯邏輯/算術(shù)左移算術(shù)左移SHR邏輯右移邏輯右移SAR 算術(shù)右移算術(shù)右移 00 CFCFb0 bnb0b0 bn bnCFROL循環(huán)左移循環(huán)左移RCL帶進(jìn)位循帶進(jìn)位循環(huán)左移環(huán)左移ROR循環(huán)右移循環(huán)右移RCR帶進(jìn)位循帶進(jìn)位循環(huán)右移環(huán)右移 CFCFCFCF知知(AL)=0B4H, (CF)=1, 分析以下指令執(zhí)行后的結(jié)果分析以下指令執(zhí)行后的結(jié)果 CF AL (1) SAL AL, 1 (2) SAR AL, 1 (3) SHL AL, 1 (4) SHR AL, 1 算術(shù)左移與
53、邏輯左移的結(jié)果一樣算術(shù)左移與邏輯左移的結(jié)果一樣 算術(shù)右移與邏輯右移的結(jié)果不同算術(shù)右移與邏輯右移的結(jié)果不同110110100101101000011011010101101000001011010執(zhí)行前執(zhí)行前移位指令例如移位指令例如2 MOV CL, 5 SAR AL, CL 執(zhí)行前執(zhí)行前 AL 01100000 60H=96 執(zhí)行后執(zhí)行后 AL 00000011 03H=3 通常通常:算術(shù)右移算術(shù)右移N位相當(dāng)于有符號(hào)數(shù)除以位相當(dāng)于有符號(hào)數(shù)除以2N有例外有例外 邏輯右移邏輯右移N位相當(dāng)于無符號(hào)數(shù)除以位相當(dāng)于無符號(hào)數(shù)除以2N 算術(shù)算術(shù)/邏輯左移邏輯左移N位相當(dāng)于無符號(hào)數(shù)乘以位相當(dāng)于無符號(hào)數(shù)乘以2N
54、移位指令例如移位指令例如3 設(shè)設(shè)(AX)=0012H, (BX)=0034H, 要求裝配成要求裝配成(AX) = 1234H MOV CL, 8 ROL AX, CL ADD AX, BX0110000000000011移位指令例如移位指令例如4 知變量知變量Y中為一字節(jié)無符號(hào)數(shù),計(jì)算中為一字節(jié)無符號(hào)數(shù),計(jì)算(Y)*10, 積放積放在在AX中。中。變換:變換:(Y)*10(Y)*(8+2)=(Y)*2+(Y)*8 (為什么要這樣變換?為什么要這樣變換? MOV AL, Y ; AL-(Y) MOV AH, 0 SHL AX, 1 ; (Y)*2 MOV BX, AX SHL AX, 1 ; (
55、Y)*4 SHL AX, 1 ; (Y)*8 ADD AX, BX ; (Y)*10綜合運(yùn)用例綜合運(yùn)用例1 將將ASCII碼轉(zhuǎn)換成碼轉(zhuǎn)換成BCD碼碼 如:如: ASC 9 BCD 6 96H MOV AL, ASC ; AL90H MOV BL, AL ;BL-90H MOV AL, ASC+1 ;AL-36H (6) AND AL, 0FH ;AL-06H OR BL, AL ;BLSI目的區(qū)首偏址目的區(qū)首偏址-DI,串長(zhǎng),串長(zhǎng)-CXCX=0按按DI所指存此字節(jié)所指存此字節(jié)按按SI所指取一字節(jié)所指取一字節(jié)(SI)+1-SI(DI)+1-DI(CX)-1-CX終了終了YN源區(qū)首偏址源區(qū)首偏址-
56、SI目的區(qū)首偏址目的區(qū)首偏址-DI串長(zhǎng)串長(zhǎng)-CX,0-DFCX=0串傳送指令串傳送指令(CX)-1-CX終了終了源區(qū)首偏址源區(qū)首偏址-SI目的區(qū)首偏址目的區(qū)首偏址-DI串長(zhǎng)串長(zhǎng)-CX,0-DF帶前綴帶前綴REP的的串傳送指令串傳送指令YN運(yùn)用串操作指令時(shí)微處置器設(shè)計(jì)有假設(shè)干商定:運(yùn)用串操作指令時(shí)微處置器設(shè)計(jì)有假設(shè)干商定: 1、源串地址由、源串地址由DS:SI指定指定 目的串地址在目的串地址在ES:DI中中 2、串長(zhǎng)送、串長(zhǎng)送CX存放器存放器 3、設(shè)置方向標(biāo)志位、設(shè)置方向標(biāo)志位DF在在EFLAG存放器中存放器中 當(dāng)當(dāng)DF=0指令指令CLD時(shí)為增量修正時(shí)為增量修正 +1 或或 +2 或或 +4 當(dāng)
57、當(dāng)DF=1指令指令STD時(shí)為減量修正時(shí)為減量修正 -1 或或 2 或或 -4 方向標(biāo)志對(duì)應(yīng)的指針挪動(dòng)表示方向標(biāo)志對(duì)應(yīng)的指針挪動(dòng)表示 低地址方向低地址方向 A . 源串源串 A J 高地址方向高地址方向目的串目的串 源串源串 目的串目的串1 nn . 正向傳送正向傳送 反向傳送反向傳送DF=0 DF=11J 符號(hào) 功能 操作 相關(guān)前綴 MOVS 串傳送 ES:DI-(DS:SI) REP SI-(SI)(+/-)1 DI-(DI)(+/-)1CMPS 串比較 (DS:SI)-(ES:DI) REPZ/REPNZ SI-(SI)(+/-)1 DI-(DI)(+/-)1SCAS 串掃描 (ES:DI
58、)-(AL) REPZ/REPNZ DI-(DI)(+/-)1LODS 裝入串 AL-(DS:SI) 普通不聯(lián)用 SI-(SI)(+/-)1 STOS 存入串 (ES:DI)-(AL) REP DI-(DI)(+/-)1符號(hào)符號(hào) 功能功能 操作操作 相關(guān)前綴相關(guān)前綴INS 串輸入串輸入 ES:DI(DX) REP DI(DI)(+/-)1OUTS 串輸出串輸出 (DX)(DS:SI) REP SI(SI)(+/-)1其中其中DX存放器中存放的是接口電路的端口號(hào)存放器中存放的是接口電路的端口號(hào)反復(fù)前綴反復(fù)前綴 終止條件終止條件 否那么否那么 REP CX=0 CX-(CX)-1,繼續(xù),繼續(xù) SI
59、,DI指向下一元素指向下一元素REPZ CX=0 或或 ZF=0 CX-(CX)-1,繼續(xù),繼續(xù)REPE SI,DI指向下一元素指向下一元素 串未終了且串相等時(shí)繼續(xù)串未終了且串相等時(shí)繼續(xù)REPNZ CX=0 或或 ZF=1 CXSI LEA DI, String2 ;目的串地址;目的串地址-DIMOV CX, 4 ;反復(fù)次數(shù);反復(fù)次數(shù)-CXREPZ CMPSB ;反復(fù)比較;反復(fù)比較JZ NEXT ;串相等轉(zhuǎn)移;串相等轉(zhuǎn)移 .NEXT:SCAS指令例如指令例如 在串在串“That is CAI中查找字符中查找字符a,找到,那,找到,那么轉(zhuǎn)到標(biāo)號(hào)么轉(zhuǎn)到標(biāo)號(hào)FOUND處處 String DB Tha
60、t is CAI ;定義串 CLD ;DF=0LEA DI, String ;串地址-DIMOV AL, a ;查找字符-ALMOV CX, 11 ;反復(fù)次數(shù)-CXREPNZ SCASB ;反復(fù)掃描JZ FOUND ;找到目的串元素轉(zhuǎn)移 FOUND: LEA SI, SOURCE ;源串偏移量;源串偏移量-SILEA DI, DESTIN ;目的串偏移量;目的串偏移量-DICLD ;DF=0MOV CX,100 ;反復(fù)比較次數(shù);反復(fù)比較次數(shù)-CXREPZ CMPSB ;反復(fù)串比較;反復(fù)串比較JCXZ MATCH ;沒有不匹配元素跳轉(zhuǎn);沒有不匹配元素跳轉(zhuǎn)DEC SI ;指向不匹配元素;指向不匹配元素LODSB ;裝入不匹配元素到;裝入不匹配元素到AL .MATCH: LOD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙合同糾紛審理思路
- 2025年山南貨運(yùn)資格證考題
- 2025年南通a2貨運(yùn)資格證考試題
- 2025年西寧年貨運(yùn)從業(yè)資格證
- 2025年長(zhǎng)春貨運(yùn)資格證模擬考試題庫下載
- 《蜱螨及蜱螨病》課件
- 房地產(chǎn)銷售班組實(shí)名管理
- 石材助理勞動(dòng)合同范例
- 招標(biāo)投標(biāo)流程優(yōu)化保證
- 大型游樂場(chǎng)預(yù)應(yīng)力施工合同
- 超市冷鏈安裝施工方案
- 新概念英語第二冊(cè)L53+Hot+snake課件
- 肢體加壓理療設(shè)備可用性驗(yàn)證記錄表
- 2023年檢驗(yàn)檢測(cè)機(jī)構(gòu)質(zhì)量手冊(cè)(依據(jù)2023年版評(píng)審準(zhǔn)則編制)
- 研究生秘書工作總結(jié)(共8篇)
- 醫(yī)院人事制度匯編
- 運(yùn)動(dòng)改造大腦(新版)
- 畜牧獸醫(yī)高水平專業(yè)群建設(shè)報(bào)告
- 《導(dǎo)演基礎(chǔ)知識(shí)》課程標(biāo)準(zhǔn)
- 西方經(jīng)濟(jì)學(xué)(上下冊(cè))PPT全套教學(xué)課件
- 履帶鉆機(jī)安全操作規(guī)程
評(píng)論
0/150
提交評(píng)論