第8講 第3章 指令系統(tǒng)_第1頁
第8講 第3章 指令系統(tǒng)_第2頁
第8講 第3章 指令系統(tǒng)_第3頁
第8講 第3章 指令系統(tǒng)_第4頁
第8講 第3章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3.8位操作類指令位操作類指令以二進制位為基本單位進行數(shù)據(jù)的操作;這是一類常用的指令,都應(yīng)該特別掌握注意這些指令對標志位的影響1、邏輯運算指令ANDORXORNOTTEST2、移位指令SHLSHRSAR3、循環(huán)移位指令ROLRORRCLRCR第三章指令系統(tǒng)(4)11邏輯與指令AND對兩個操作數(shù)執(zhí)行邏輯與運算,結(jié)果送到目的操作數(shù)AND指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義ANDreg,imm/reg/mem

;reg←reg∧imm/reg/memANDmem,imm/reg

;mem←mem∧imm/reg只有相“與”的兩位都是1,結(jié)果才是1;否則,“與”的結(jié)果為0AND第三章指令系統(tǒng)(4)2邏輯或指令OR對兩個操作數(shù)執(zhí)行邏輯或運算,結(jié)果送到目的操作數(shù)OR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義ORreg,imm/reg/mem

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

;mem←mem∨imm/reg只要相“或”的兩位有一位是1,結(jié)果就是1;否則,結(jié)果為0OR第三章指令系統(tǒng)(4)3邏輯異或指令XOR對兩個操作數(shù)執(zhí)行邏輯異或運算,結(jié)果送到目的操作數(shù)XOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義XORreg,imm/reg/mem

;reg←reg⊕imm/reg/memXORmem,imm/reg

;mem←mem⊕imm/reg只有相“異或”的兩位不相同,結(jié)果才是1;否則,結(jié)果為0XOR第三章指令系統(tǒng)(4)4邏輯非指令NOT對一個操作數(shù)執(zhí)行邏輯非運算NOT指令是一個單操作數(shù)指令NOT指令不影響標志位NOTreg/mem

;reg/mem←~reg/mem按位取反,原來是“0”的位變?yōu)椤?”;原來是“1”的位變?yōu)椤?”NOT第三章指令系統(tǒng)(4)5例3.27:邏輯運算moval,45h ;邏輯與al=01handal,31h ;CF=OF=0,SF=0、ZF=0、PF=0moval,45h ;邏輯或al=75horal,31h ;CF=OF=0,SF=0、ZF=0、PF=0moval,45h ;邏輯異或al=74hxoral,31h ;CF=OF=0,SF=0、ZF=0、PF=1moval,45h ;邏輯非al=0bahnotal ;標志不變第三章指令系統(tǒng)(4)6例3.28:邏輯指令應(yīng)用;AND指令可用于復位某些位(同0相與),不影響其他位:將BL中D3和D0位清0,其他位不變andbl,11110110B;OR指令可用于置位某些位(同1相或),不影響其他位:將BL中D3和D0位置1,其他位不變orbl,00001001B;XOR指令可用于求反某些位(同1相異或),不影響其他位:將BL中D3和D0位求反,其他不變xorbl,00001001B這些指令反應(yīng)了匯編語言的特點:方便的位操作第三章指令系統(tǒng)(4)7測試指令TEST對兩個操作數(shù)執(zhí)行邏輯與運算,結(jié)果不回送到目的操作數(shù)TEST指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義TESTreg,imm/reg/mem

;reg∧imm/reg/memTESTmem,imm/reg

;mem∧imm/reg只有相“與”的兩位都是1,結(jié)果才是1;否則,“與”的結(jié)果為0TEST第三章指令系統(tǒng)(4)8例3.29:測試為0或1testal,01h

;測試AL的最低位D0jnzthere ;標志ZF=0,即D0=1 ;則程序轉(zhuǎn)移到there... ;否則ZF=1,即D0=0,順序執(zhí)行there:...

TEST指令通常用于檢測一些條件是否滿足,但又不希望改變原操作數(shù)的情況TEST用于程序的轉(zhuǎn)向判斷第三章指令系統(tǒng)(4)9移位指令(shift)將操作數(shù)移動一位或多位,分成邏輯移位和算術(shù)移位,分別具有左移或右移操作SHLreg/mem,1/CL;邏輯左移,最高位進入CF,最低位補0SHRreg/mem,1/CL;邏輯右移,最低位進入CF,最高位補0SALreg/mem,1/CL;算術(shù)左移,最高位進入CF,最低位補0SARreg/mem,1/CL;算術(shù)右移,最低位進入CF,最高位不變SAL與SHL相同第三章指令系統(tǒng)(4)10移位指令的功能最高位不變最高位補0第三章指令系統(tǒng)(4)11移位指令的操作數(shù)移位指令的第一個操作數(shù)是指定的被移位的操作數(shù),可以是寄存器或存儲單元后一個操作數(shù)表示移位位數(shù),該操作數(shù)為1,表示移動一位;當移位位數(shù)大于1時,則用CL寄存器值表示,該操作數(shù)表達為CL第三章指令系統(tǒng)(4)12移位指令對標志的影響按照移入的位設(shè)置進位標志CF根據(jù)移位后的結(jié)果影響SF、ZF、PF對AF沒有定義如果進行一位移動,則按照操作數(shù)的最高符號位是否改變,相應(yīng)設(shè)置溢出標志OF:如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則OF=1;否則OF=0。當移位次數(shù)大于1時,OF不確定第三章指令系統(tǒng)(4)13例3.30:移位指令movcl,4moval,0f0h ;al=f0hshlal,1 ;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shral,1 ;al=70h;CF=0,SF=0、ZF=0、PF=0、OF=1saral,1 ;al=38h;CF=0,SF=0、ZF=0、PF=0、OF=0saral,cl ;al=03h;CF=1,SF=0、ZF=0、PF=1第三章指令系統(tǒng)(4)14例3.31:移位乘法movsi,axshlsi,1 ;si←2×axaddsi,ax ;si←3×axmovdx,bxmovcl,03hshldx,cl ;dx←8×bxsubdx,bx ;dx←7×bxadddx,si ;dx←7×bx+3×ax邏輯左移一位相當于無符號數(shù)乘以2

邏輯右移一位相當于無符號數(shù)除以2用移位指令代替乘法指令是高效的程序第三章指令系統(tǒng)(4)15循環(huán)移位指令(rotate)將操作數(shù)從一端移出的位返回到另一端形成循環(huán),分成不帶進位和帶進位,分別具有左移或右移操作ROLreg/mem,1/CL

;不帶進位循環(huán)左移RORreg/mem,1/CL

;不帶進位循環(huán)右移RCLreg/mem,1/CL

;帶進位循環(huán)左移RCRreg/mem,1/CL

;帶進位循環(huán)右移第三章指令系統(tǒng)(4)16不帶進位循環(huán)移位指令第三章指令系統(tǒng)(4)17帶進位循環(huán)移位指令第三章指令系統(tǒng)(4)18循環(huán)移位指令對標志的影響按照指令功能設(shè)置進位標志CF不影響SF、ZF、PF、AF如果進行一位移動,則按照操作數(shù)的最高符號位是否改變,相應(yīng)設(shè)置溢出標志OF:如果移位前的操作數(shù)最高位與移位后操作數(shù)的最高位不同(有變化),則OF=1;否則OF=0。當移位次數(shù)大于1時,OF不確定第三章指令系統(tǒng)(4)19例3.32:32位數(shù)移位;將DX.AX中32位數(shù)值左移一位shlax,1rcldx,1DXAXCF0第三章指令系統(tǒng)(4)20例3.33:位傳送;把AL最低位送BL最低位,保持AL不變rorbl,1roral,1rclbl,1rolal,1AL、BLCFBLCFALCFAL之D0BL其他位也不變?此例不用看第三章指令系統(tǒng)(4)21例3.34:BCD碼合并;AH.AL分別存放著非壓縮BCD碼的兩位;將它們合并成為一個壓縮BCD碼存ALandax,0f0fh ;保證高4位為0movcl,4rolah,cl ;也可以用shlah,claddal,ah ;也可以用oral,ah第三章指令系統(tǒng)(4)223.9串操作類指令串操作指令是8086指令系統(tǒng)中比較獨特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,在操作主存連續(xù)區(qū)域的數(shù)據(jù)時,特別好用、因而常用重點掌握: MOVSSTOSLODS CMPSSCASREP一般了解: REPZ/REPEREPNZ/REPNE第三章指令系統(tǒng)(4)23串數(shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(String)——即在連續(xù)的主存區(qū)域中,字節(jié)或字的序列串操作指令的操作對象是以字(W)為單位的字串,或是以字節(jié)(B)為單位的字節(jié)串第三章指令系統(tǒng)(4)24串操作數(shù)兩種情況: 1、兩個操作數(shù)均為串數(shù)據(jù);MOVS——用于將一串從源移動到目的CMPS——用于將兩串逐一比較 2、兩個操作數(shù)一為AL/AX,另一為串STOS——用于將AL/AX中字節(jié)/字填充到目的串LODS——用于從源串中取字節(jié)/字到AL/AXSCAS——用于從目的串中查找特定的字節(jié)/字第三章指令系統(tǒng)(4)25串尋址方式源操作數(shù)用寄存器SI尋址,默認在數(shù)據(jù)段DS中:DS:[SI],但允許段超越目的操作數(shù)用寄存器DI尋址,默認在附加段ES中:ES:[DI],不允許段超越每執(zhí)行一次串操作指令,SI和DI將自動修改:±1(對于字節(jié)串)或±2(對于字串)執(zhí)行指令CLD指令后,DF=0,地址指針增1或2執(zhí)行指令STD指令后,DF=1,地址指針減1或2第三章指令系統(tǒng)(4)26串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSB

;字節(jié)串傳送:ES:[DI]←DS:[SI] ;SI←SI±1,DI←DI±1MOVSW

;字串傳送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2第三章指令系統(tǒng)(4)27例3.35:字節(jié)串傳送

movsi,offsetsource movdi,offsetdestination movcx,100 ;cx←傳送次數(shù)

cld ;置DF=0,地址增加again: movsb ;傳送一個字節(jié)

deccx ;傳送次數(shù)減1 jnzagain

;判斷傳送次數(shù)cx是否為0 ;不為0,則到again位置執(zhí)行指令 ;否則,結(jié)束offset是匯編操作符,求出變量的偏移地址第三章指令系統(tǒng)(4)28例3.36:字串傳送

movsi,offsetsource movdi,offsetdestination movcx,50 ;cx←傳送次數(shù)

cld ;置DF=0,地址增加again: movsw ;傳送一個字

deccx ;傳送次數(shù)減1 jnzagain

;判斷傳送次數(shù)cx是否為0 ;不為0,則到again位置執(zhí)行指令 ;否則,結(jié)束第三章指令系統(tǒng)(4)29解釋offset是什么?

Offset是匯編語言提供的匯編偽指令,它指示變量的偏移地址(本例中source和destination均為變量)。該段程序的功能是什么? 將數(shù)據(jù)段中由source指示的100個字節(jié)數(shù)據(jù),傳送到附加段由destination指示的主存區(qū)。第三章指令系統(tǒng)(4)30串存儲STOS(storestring)把AL或AX數(shù)據(jù)傳送至目的地址STOSB

;字節(jié)串存儲:ES:[DI]←AL ;DI←DI±1STOSW

;字串存儲:ES:[DI]←AX ;DI←DI±2第三章指令系統(tǒng)(4)31例3.37:串存儲

movax,0 movdi,0 movcx,8000h

;cx←傳送次數(shù)(32×1024) cld ;DF=0,地址增加again: stosw ;傳送一個字 deccx ;傳送次數(shù)減1 jnzagain ;傳送次數(shù)cx是否為0可將CLD改為STD嗎?如何改用STOSB?

可不用給DI賦值嗎?DI為偶數(shù)即可第三章指令系統(tǒng)(4)32串讀取LODS(loadstring)把指定主存單元的數(shù)據(jù)傳送給AL或AXLODSB

;字節(jié)串讀?。篈L←DS:[SI] ;SI←SI±1LODSW

;字串讀?。篈X←DS:[SI] ;SI←SI±2第三章指令系統(tǒng)(4)33例3.38串讀?。?

movsi,offsetblock movdi,offsetdplus movbx,offsetdminus

movax,ds moves,ax;設(shè)置es=ds,說明數(shù)據(jù)都在一個段中 movcx,count ;cx←字節(jié)數(shù) cld第三章指令系統(tǒng)(4)34例3.38串讀?。?go_on: lodsb

;從block取出一個數(shù)據(jù) testal,80h ;檢測符號位,判斷是正是負 jnzminus ;符號位為1,是負數(shù),轉(zhuǎn)向minus

stosb ;符號位為0,是正數(shù),存入dplus jmpagain ;程序轉(zhuǎn)移到again處繼續(xù)執(zhí)行第三章指令系統(tǒng)(4)35例3.38:串讀?。?minus: xchgbx,di

stosb

;把負數(shù)存入dminus xchgbx,diagain: deccx ;字節(jié)數(shù)減1 jnzgo_on ;完成正負數(shù)據(jù)分離第三章指令系統(tǒng)(4)36解釋該段程序的功能是什么?數(shù)據(jù)段DS中有一個數(shù)據(jù)塊,具有count個字節(jié),起始地址為block。現(xiàn)在要把其中的正數(shù)、負數(shù)分開,分別存入同一個段的兩個緩沖區(qū)。存放正數(shù)的起始地址為dplus,存放負數(shù)的起始地址為dminus。第三章指令系統(tǒng)(4)37串比較CMPS(comparestring)將主存中的源操作數(shù)減去至目的操作數(shù),以便設(shè)置標志,進而比較兩操作數(shù)之間的關(guān)系CMPSB

;字節(jié)串比較:DS:[SI]-ES:[DI] ;SI←SI±1,DI←DI±1CMPSW

;字串比較:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2第三章指令系統(tǒng)(4)38例3.39a:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count;是字符串的個數(shù)(字節(jié)) cldagain: cmpsb ;比較兩個字符 jnzunmat ;有不同字符,轉(zhuǎn)移 deccx jnzagain ;進行下一個字符比較 moval,0 ;字符串相等,設(shè)置00h jmpoutput ;轉(zhuǎn)向output,這句不能掉了unmat: moval,0ffh ;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標記若有一個不相等:AL=FFH若所有都相等:AL=00H第三章指令系統(tǒng)(4)39串掃描SCAS(scanstring)將AL/AX減去至目的操作數(shù),以便設(shè)置標志,進而比較AL/AX與操作數(shù)之間的關(guān)系SCASB

;字節(jié)串掃描:AL-ES:[DI] ;DI←DI±1SCASW

;字串掃描:AX-ES:[DI] ;DI←DI±2第三章指令系統(tǒng)(4)40例3.40a:查找字符串

movdi,offsetstring moval,20h;20H是什么? movcx,count cldagain: scasb

;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 deccx ;不是空格 jnzagain ;搜索下一個字符 ... ;不含空格,則繼續(xù)執(zhí)行found: ...第三章指令系統(tǒng)(4)41重復前綴指令(repeat)串操作指令執(zhí)行一次,僅對數(shù)據(jù)串中的一個字節(jié)或字量進行操作。但是串操作指令前,都可以加一個重復前綴,實現(xiàn)串操作的重復執(zhí)行。重復次數(shù)隱含在CX寄存器中重復前綴分2類,3條指令:配合不影響標志的MOVS、STOS(和LODS)指令的REP前綴配合影響標志的CMPS和SCAS指令的REPZ和REPNZ前綴第三章指令系統(tǒng)(4)42REP重復前綴指令REP前綴可以理解為:當數(shù)據(jù)串沒有結(jié)束(CX≠0),則繼續(xù)傳送例3.36和例3.37中,程序段的最后3條指令,可以分別替換為: REPMOVSB和REPSTOSWREP

;每執(zhí)行一次串指令,CX減1 ;直到CX=0,重復執(zhí)行結(jié)束第三章指令系統(tǒng)(4)43重復串傳送(例3.36)

movsi,offsetsource movdi,offsetdestination movcx,100 ;cx←傳送次數(shù) cld repmovsbagain: movsb ;傳送一個字節(jié) deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0

;不為0(ZF=0),則轉(zhuǎn)移again位置執(zhí)行 ;否則,結(jié)束第3章第三章指令系統(tǒng)(4)44重復串存儲(例3.37)movax,0movdi,0movcx,8000hcldrepstoswagain: stosw ;傳送一個字 deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0第3章第三章指令系統(tǒng)(4)45REPZ重復前綴指令REPZ/REPE前綴可以理解為:當數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串相等(ZF=1),則繼續(xù)比較找不同REPZ

;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為0,跳出循環(huán) ;只要CX0或ZF=1,重復執(zhí)行結(jié)束第三章指令系統(tǒng)(4)46REPNZ重復前綴指令REPNZ/REPNE前綴可以理解為:當數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串不相等(ZF=0),則繼續(xù)比較找相同REPNZ

;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為1,跳出循環(huán) ;只要CX<=>0或ZF=0,重復執(zhí)行結(jié)束第三章指令系統(tǒng)(4)47(重復控制前綴)串指令

控制重復次數(shù)基本操作重復前綴:REPREPZ/REPEREPNZ/REPNE(CX)=(CX)-1REP后的串

令YNCX=0?(CX)=(CX)-1REPZ后的串

令YNYNCX=0?ZF=1?(CX)=(CX)-1REPNZ后的串

令YNYNCX=0?ZF=0?(1)REP前綴(CX)≠0則表示重復次數(shù)未滿;(2)REPZ/REPEREPNZ/REPNE前綴根據(jù)(CX)和(ZF)的值判斷是否結(jié)束串指令。程序有兩個出口第三章指令系統(tǒng)(4)48執(zhí)行完REPZCMPSB后,此時:ZF=1,兩串相等CX=0,兩串所有元素已比較完SI、DI串尾的下一單元(重復控制前綴)串操作指令的執(zhí)行過程執(zhí)行完REPZCMPSB后,此時:ZF=0,兩串不等CX=3,剩下的未比較的元素個數(shù)SI、DI指向第一個不相等元素的下一元素。112233

441a4d112233442c4d2b3c3b3cstring1string2DS:SIES:DI(CX)=3ZF=0……112233

441a2b3c4d112233441a2b3c4dstring1string2DS:SIES:DI(CX)=0ZF=1……第三章指令系統(tǒng)(4)

溫馨提示

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

評論

0/150

提交評論