匯編語言 第三章-3_第1頁
匯編語言 第三章-3_第2頁
匯編語言 第三章-3_第3頁
匯編語言 第三章-3_第4頁
匯編語言 第三章-3_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

3.2.3邏輯指令

邏輯指令包括邏輯運(yùn)算指令和移位指令。由于它們都是按位進(jìn)行操作的,故又稱位操作指令。邏輯指令以二進(jìn)制位為基本單位進(jìn)行數(shù)據(jù)運(yùn)算,屬于常用指令,應(yīng)該熟練掌握。要特別注意這些指令對標(biāo)志位的影響。1、邏輯運(yùn)算指令A(yù)ND

OR

XOR

NOT

TEST2、移位指令SHL

SHR

SAR3、循環(huán)移位指令ROL

ROR

RCL

RCR2/5/20231邏輯非指令NOT指令格式:NOTOPR指令功能:本指令將給定的操作數(shù)按位求反,且不影響標(biāo)志位。

NOTreg/mem

;reg/mem←~reg/mem2/5/20232邏輯或指令OR

指令格式:ORDST,SRC指令功能:本指令將源操作數(shù)與目標(biāo)操作數(shù)按位進(jìn)行邏輯“或”運(yùn)算并將結(jié)果送入目標(biāo)操作數(shù)。

ORreg,imm/reg/mem

;reg←reg∨imm/reg/memORmem,imm/reg

;mem←mem∨imm/regOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義。2/5/20233邏輯與指令A(yù)ND指令格式:ANDDST,SRC指令功能:AND指令將源操作數(shù)和目標(biāo)操作數(shù)按位進(jìn)行邏輯“與”運(yùn)算,然后將結(jié)果送入目標(biāo)操作數(shù)。

ANDreg,imm/reg/mem

ANDmem,imm/regAND指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義2/5/20234邏輯異或指令XOR指令格式:XORDST,SRC指令功能:XOR指令將源操作數(shù)與目標(biāo)操作數(shù)按位進(jìn)行“異或”運(yùn)算,其結(jié)果保留在目標(biāo)操作數(shù)中。

XORmem,imm/reg

;mem←mem⊕imm/reg

XORreg,imm/reg/mem

;reg←reg⊕imm/reg/memXOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義2/5/20235TEST測試指令指令格式:TESTOPR1,OPR2指令功能:TEST指令將兩個操作數(shù)按位進(jìn)行邏輯“與”運(yùn)算,但不保存結(jié)果,只根據(jù)特征設(shè)置狀態(tài)位。TESTmem,imm/reg

;mem∧imm/regTESTreg,imm/reg/mem

;reg∧imm/reg/mem2/5/20236應(yīng)用:1)AND:使一個操作數(shù)中的若干位維持不變,而另外若干位清0;2)OR:使一個操作數(shù)中的若干位維持不變,而另外若干位置1;3)XOR:使一個操作數(shù)中的若干位維持不變,而另外若干位取反;4)TEST:用來檢測某些位是否為1,但又不改變原操作數(shù)值.例:MOV AL,34H ;AL=00110100B 11001111BANDAL,CFH ;AL=00000100BMOVAL,41H ;AL=01000001B 00100000BORAL,20H ;AL=01100001BMOV AL,34H ;AL=00110100B 00001111BXORAL,0FH ;AL=00111011B2/5/20237移位指令移位指令使操作數(shù)中的所有各位向左或向右移若干位,所移動的位數(shù)由記數(shù)值CNT確定。當(dāng)只移1位時CNT為立即數(shù)1,若移多位,則將移位個數(shù)置于CL寄存器中。移位(含循環(huán)移位)指令對狀態(tài)位的影響是:CF位根據(jù)指令規(guī)則設(shè)置;OF位只有當(dāng)CNT=1時有效,在移位后最高有效位的值發(fā)生變化時OF置1,否則是0;SF、ZF和PF根據(jù)移位后的結(jié)果設(shè)置;而AF位的值不確定。循環(huán)移位指令不影響CF和OF以外的其他標(biāo)志。2/5/20238移位指令(1)邏輯左右移與算術(shù)左右移SHLreg/mem,1/CL;邏輯左移,最高位進(jìn)入CF,最低位補(bǔ)0SHRreg/mem,1/CL;邏輯右移,最低位進(jìn)入CF,最高位補(bǔ)0SALreg/mem,1/CL;算術(shù)左移,最高位進(jìn)入CF,最低位補(bǔ)0

SARreg/mem,1/CL;算術(shù)右移,最低位進(jìn)入CF,最高位不變演示示意圖2/5/20239移位指令的功能2/5/202310移位指令應(yīng)用舉例movcl,4moval,0f0h ;al=f0hshlal,1 ;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shral,1 ;al=70hsaral,1 ;al=38hsar

al,cl

;al=03h;CF=1,SF=0、ZF=0、PF=1

二進(jìn)制數(shù)據(jù)右移1位相當(dāng)于除2

左移1位相當(dāng)于乘2

2/5/202311循環(huán)移位指令將操作數(shù)從一端移出的位返回到另一端形成循環(huán),分成不帶進(jìn)位和帶進(jìn)位,分別具有左移或右移操作ROLreg/mem,1/CL ;不帶進(jìn)位循環(huán)左移RORreg/mem,1/CL ;不帶進(jìn)位循環(huán)右移RCLreg/mem,1/CL ;帶進(jìn)位循環(huán)左移RCRreg/mem,1/CL ;帶進(jìn)位循環(huán)右移示意圖示意圖2/5/202312帶進(jìn)位循環(huán)移位指令2/5/202313例:編寫程序段實現(xiàn)AX中的內(nèi)容乘10,結(jié)果存放在AX中.分析:將一個數(shù)左移一位,相當(dāng)于乘2,則

X*10=X*8+X*2程序: XOR AH,AH SHL AX,1 ;2X MOV BX,AX ;暫存2X SHL AX,1 ;4X SHL AX,1 ;8X ADD AX,BX ;8X+2X2/5/202314例:編寫程序段將DX,AX中的32位二進(jìn)制數(shù)左移一位。程序一

SHL AX,1 SHL DX,1程序二

SHL AX,1 RCL DX,1思考:編寫程序段把DX和AX中的雙字右移四位。2/5/2023153.2.4串操作指令串:字節(jié)或字的序列,在內(nèi)存中占用連續(xù)存儲單元。特點:1)每條串指令有以字和字節(jié)形式來做重復(fù)處理2)成對使用ES:DI或DS:SI寄存器,DS:SI指向源串,ES:DI指向目的串3)指令自動調(diào)整SI和DI的值,但按增量還是按減量修改,取決于標(biāo)志位DF4)方向標(biāo)志DF控制操作方向,DF=1,減址;DF=0,增址5)任何一個串操作指令,可以在前面加上一個重復(fù)操作前綴,于是指令就重復(fù)執(zhí)行,直至在寄存器CX中的操作次數(shù)滿足要求為止。2/5/202316(1)MOVS(MoveString)

功能:把由SI作為指針的源串中的一個字節(jié)或字,傳送至由DI作為指針的目的串,并且相應(yīng)地修改指針,以指向串中的下一個元素。操作:

MOVSB;MOVAL,[SI]MOVES:[DI],ALINCDI/DECDIINCSI/DECSIMOVSW;MOVAX,[SI]MOVES:[DI],AXADDDI,2/SUBDI,2ADDSI,2/SUBSI,2

說明:此指令對標(biāo)志位無影響。2/5/202317(2)CMPS(CompareString)

功能:由SI作為指針的源串與由DI作為指針的目的串(字或字節(jié))相比較(源串-目的串),但相減的結(jié)果只反映到標(biāo)志位上,而不送至任何一個操作數(shù)。同時相應(yīng)地修改源和目的串指針,指向串中的下一個元素。操作CMPSB;CMP[SI],ES:[DI]INCDI/DECDI INCSI/DECSICMPSW;CMP[SI],ES:[DI]ADDDI,2/SUBDI,2ADDSI,2/SUBSI,2說明:1)標(biāo)志位A、C、O、P、S和Z反映了目的串元素和源串元素之間的關(guān)系。2)這個指令可以用來檢查兩個串是否相同。通常在此指令之后,應(yīng)有一個條件轉(zhuǎn)移指令。2/5/202318(3)SCAS(ScanString)

功能:搜索串指令,關(guān)鍵字放在AL(字節(jié))或AX(字)中,操作時從AL(字節(jié)操作)或AX(字操作)的內(nèi)容中減去由DI作為指針的目的串元素,結(jié)果反映在標(biāo)志位上,但并不改變目的串元素以及累加器中的值。操作SCASB;CMPAL,ES:[DI] INCDI/DECDISCASW;CMPAX,ES:[DI]ADDDI,2/SUBDI,2說明:標(biāo)志位A、C、O、P、S和Z中反映了在AL或AX中的搜索值與串元素之間的關(guān)系。2/5/202319(4)LODS(LoadString)功能:本指令把由SI作為指針的串元素,傳送至AL(字節(jié)操作)或AX(字操作),同時修改SI指向串中的下一個元素。操作LODSB;MOVAL,[SI] INCSI/DECSILODSW;MOVAX,[SI]ADDSI,2/SUBSI,2說明:1)這個指令正常情況下是不重復(fù)執(zhí)行的,因為每重復(fù)一次,累加器中的內(nèi)容就要改寫,只保留最后一個元素。2)此指令對標(biāo)志位無影響。2/5/202320(5)STOS(StoreString)

功能:從累加器AL(字節(jié)操作)或AX(字操作)傳送一個字節(jié)或字,到由DI作為指針的目的串中,同時修改DI以指向串中的下一個單元。操作STOSB;MOVES:[DI],AL;INCDI/DECDISTOSW;MOVES:[DI],AX;ADDDI,2/SUBDI,2說明:1)可以在串中建立一串相同的值,初始化字符串單元。2)此指令對標(biāo)志位無影響。2/5/202321(6)重復(fù)前綴

1)REP

(1)操作:判斷CX是否為0,若為0,結(jié)束;否則CX減1,重復(fù)其后的串操作

(2)用在指令MOVS和STOS之前

MOV CX,100MOV CX,100

NEXT: MOVSBREP MOVSB

LOOP NEXT

2/5/202322(6)重復(fù)前綴

2)REPZ/REPE

(1)操作:判斷CX=0或ZF=0,若CX為0或不等,結(jié)束;否則CX減1,重復(fù)其后的串操作

(2)用在指令CMPS和SCAS之前

3)REPNE/REPNZ

(1)操作:判斷CX=0或ZF=1,若CX為0或相等,結(jié)束;否則CX減1,重復(fù)其后的串操作

(2)用在指令SCAS之前2/5/202323例:將數(shù)據(jù)段中從AREA1開始存放的100個字節(jié)數(shù)搬到附加段以AREA2為首址的區(qū)域中。方法一:采用MOV指令 例方法二:采用MOVS指令 例方法三:采用重復(fù)前綴串指令例2/5/202324方法一:

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100AGAIN: MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI DEC CX JNZ AGAIN

返回2/5/202325方法二: MOV SI,OFFSETAREA1 MOV DI,OFFSETAREA2 MOV CX,100 CLDAGAIN: MOVSB DEC CX JNZ AGAIN

返回2/5/202326方法三:

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100 CLD REP MOVSB

返回2/5/202327例2:數(shù)據(jù)塊移動,從AREA1送到AREA2情況一:源串首地址<目的串首地址,且無重疊情況二:源串首地址>目的串首地址,且無重疊情況三:源串首地址<目的串首地址,且重疊情況四:源串首地址>目的串首地址,且重疊2/5/202328只能以減址方式傳送

STD LEA SI,AREA1+N-1 LEA DI,AREA2+N-1 MOV CX,N REP MOVSB2/5/202329

只能以增址方式傳送

CLD LEA SI,AREA1 LEA DI,AREA2 MOV CX,N REP MOVSB 2/5/202330例:編寫程序比較

溫馨提示

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

最新文檔

評論

0/150

提交評論