匯編語言2-3課件_第1頁
匯編語言2-3課件_第2頁
匯編語言2-3課件_第3頁
匯編語言2-3課件_第4頁
匯編語言2-3課件_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

教學(xué)提示在學(xué)習(xí)和應(yīng)用匯編語言進(jìn)行程序設(shè)計時,有一些經(jīng)常遇到的問題,例如算術(shù)運算、代碼轉(zhuǎn)換等,需要掌握總結(jié)常見編程問題2.5串操作類指令串操作指令是8086指令系統(tǒng)中比較獨特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,在操作主存連續(xù)區(qū)域的數(shù)據(jù)時,特別好用、因而常用.重點掌握: MOVSSTOSLODS CMPSSCASREP熟悉: REPZ/REPEREPNZ/REPNE串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(String)——即在連續(xù)的主存區(qū)域中,字節(jié)或字的序列串操作指令的操作對象是以字(W)或字節(jié)(B)為單位的字串串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSB

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

;字串傳送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2演示例2.52:字節(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是匯編操作符,求出變量的偏移地址例2.52:字串傳送

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

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

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

;判斷傳送次數(shù)cx是否為0 ;不為0,則到again位置執(zhí)行指令 ;否則,結(jié)束串傳送舉例:數(shù)據(jù)串復(fù)制要求:將數(shù)據(jù)串data1復(fù)制到data2存儲區(qū)。源程序見ex-copy.asm例2.53:串存儲

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ù)即可例2.54:串操作

movsi,offsetblock movdi,offsetdplus movbx,offsetdminus

movax,ds;設(shè)置es=ds,使源數(shù)據(jù) moves,ax;與目的數(shù)據(jù)在一個段中 movcx,count ;cx←字節(jié)數(shù) cld程序段功能:將block數(shù)據(jù)區(qū)中的負(fù)數(shù)存入dminus區(qū),其他數(shù)存入dplus區(qū)。源程序見Ex2-54.asm串比較CMPS(comparestring)將源操作數(shù)減去目的操作數(shù),根據(jù)結(jié)果設(shè)置標(biāo)志,同時修改si和di的值CMPSB

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

;字串比較:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2特別注意與CMP不同例2.55:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count cldagain: cmpsb ;比較兩個字符 jnzunmat ;有不同字符,轉(zhuǎn)移 deccx jnzagain

;進(jìn)行下一個字符比較 moval,0

;字符串相等,設(shè)置00h jmpoutput

;轉(zhuǎn)向outputunmat: moval,0ffh

;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標(biāo)記比較兩個等長字符串,若相等,則將AL置0,否則,置FFH思考:1、改進(jìn)上述程序段,使之能處理任意兩個字符串,源程序見ex2-55.ASM2、改進(jìn)程序ex2-55.asm,使之能對任意輸入的兩個字符串進(jìn)行比較源程序見cmp_str.asm串掃描SCAS(scanstring)將AL/AX減去目的操作數(shù),以便設(shè)置標(biāo)志,進(jìn)而比較AL/AX與操作數(shù)之間的關(guān)系SCASB

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

;字串掃描:AX-ES:[DI] ;DI←DI±2例2.56:查找字符串

movdi,offsetstring moval,20h;空格的ascii碼 movcx,count cldagain: scasb

;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 deccx ;不是空格 jnzagain ;搜索下一個字符 …… ;不含空格found: ……查找字符串中是否包含空格?REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),則繼續(xù)傳送例2.52和例2.53中,程序段的最后3條指令,可以分別替換為: REPMOVSB和REPSTOSWREP ;每執(zhí)行一次串指令,CX減1 ;直到CX=0,重復(fù)執(zhí)行結(jié)束重復(fù)串傳送(例2.52)

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é)束第2章演示REPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串相等(ZF=1),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為0, ;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串不相等(ZF=0),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為1, ;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況①ZF=0,即出現(xiàn)不相等的字符②CX=0,即比較完所有字符:這種情況下,如果ZF=0,說明最后一個字符不等;而ZF=1表示所有字符比較后都相等,也就是兩個字符串相同所以,重復(fù)比較結(jié)束后,jnzunmat指令的條件成立ZF=0,字符串不相等例2.58:查找字符串

movdi,offsetstring moval,20h movcx,count cld

repnzscasb

;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 ... ;不含空格,則繼續(xù)執(zhí)行found: ...2.6處理機(jī)控制類指令對CPU狀態(tài)進(jìn)行控制的指令NOPCS:SS:DS:ES:LOCKHLTESCWAIT段超越前綴指令在允許段超越的存儲器操作數(shù)之前,使用段超越前綴指令,將采用指定的段寄存器尋址操作數(shù)CS:

;使用代碼段的數(shù)據(jù)SS:

;使用堆棧段的數(shù)據(jù)DS:

;使用數(shù)據(jù)段的數(shù)據(jù)ES:

;使用附加段的數(shù)據(jù)封鎖前綴指令 LOCK

;封鎖總線這是一個指令前綴,可放在任何指令前這個前綴使得在這個指令執(zhí)行時間內(nèi),8086處理器的封鎖輸出引腳有效,即把總線封鎖,使別的控制器不能控制總線;直到該指令執(zhí)行完后,總線封鎖解除暫停指令

HLT

;進(jìn)入暫停狀態(tài)暫停指令使CPU進(jìn)入暫停狀態(tài),這時CPU不進(jìn)行任何操作。當(dāng)CPU發(fā)生復(fù)位或來自外部的中斷時,CPU脫離暫停狀態(tài)HLT指令可用于程序中等待中斷。當(dāng)程序中必須等待中斷時,可用HLT,而不必用軟件死循環(huán)。然后,中斷使CPU脫離暫停狀態(tài),返回執(zhí)行HLT的下一條指令交權(quán)指令

ESC

6位立即數(shù),reg/mem;把浮點指令交給浮點處理器執(zhí)行浮點協(xié)處理器8087指令是與8086的整數(shù)指令組合在一起的,當(dāng)8086發(fā)現(xiàn)是一條浮點指令時,就利用ESC指令將浮點指令交給8087執(zhí)行實際編寫程序時,一般采用易于理解的浮點指令助記符格式ESC6,[SI] ;實數(shù)除法指令:FDIVdwordptr[SI]ESC20H,AL ;整數(shù)加法指令:FADDST(0),ST第2章等待指令 WAIT

;進(jìn)入等待狀態(tài)8086利用WAIT指令和測試引腳實現(xiàn)與8087同步運行浮點指令經(jīng)由8086處理發(fā)往8087,并與8086本身的整數(shù)指令在同一個指令序列;而8087執(zhí)行浮點指令較慢,所以8086必須與8087保持同步第2章總結(jié)本章詳細(xì)而完整地介紹了8086的16位指令系統(tǒng)的每條指令希望大家進(jìn)行一下整理(總結(jié)):尋址方式指令支持的操作數(shù)形式指令對標(biāo)志的影響常見編程問題通過復(fù)習(xí)整理,形成指令系統(tǒng)的整體概念,進(jìn)而掌握常用指令第2章教學(xué)要求(4)熟悉串操作尋址特點掌握基本指令:MOVS/LODS/STOS、REP熟悉特色指令:CMPS/SCAS、

溫馨提示

  • 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

提交評論