安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt
《安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《安徽大學(xué)匯編語(yǔ)言程序設(shè)計(jì).ppt(469頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
匯編語(yǔ)言程序設(shè)計(jì),,引言,課程介紹課程的任務(wù)、目的和基本要求主要教學(xué)內(nèi)容和學(xué)時(shí)教學(xué)要求主要參考書作業(yè)、實(shí)驗(yàn)和考試,課程介紹,專業(yè)基礎(chǔ)課軟件開(kāi)發(fā)的一個(gè)組成部分一種低級(jí)語(yǔ)言的程序設(shè)計(jì),課程的任務(wù)、目的和基本要求,了解微型計(jì)算機(jī)的基本結(jié)構(gòu)了解和掌握微型計(jì)算機(jī)的基本工作原理掌握匯編語(yǔ)言及其應(yīng)用能獨(dú)立完成簡(jiǎn)單的匯編語(yǔ)言程序設(shè)計(jì)認(rèn)真完成作業(yè)和上機(jī)任務(wù),主要教學(xué)內(nèi)容和學(xué)時(shí),主要內(nèi)容1----8章學(xué)時(shí):上課54學(xué)時(shí)上機(jī)36學(xué)時(shí),教學(xué)要求,課堂上注意聽(tīng)講、重要的是理解部分補(bǔ)充內(nèi)容需要記筆記課堂外一定要看書復(fù)習(xí)或預(yù)習(xí)、完成作業(yè)充分利用上機(jī)時(shí)間、多編程練習(xí),主要參考書,《80X86匯編語(yǔ)言程序設(shè)計(jì)教程》,楊季文等著,清華大學(xué)出版社。《匯編語(yǔ)言程序設(shè)計(jì)》,錢曉捷著,電子工業(yè)出版社?!禝BMPC匯編語(yǔ)言程序設(shè)計(jì)》,沈美明著,清華大學(xué)出版。,作業(yè)、實(shí)驗(yàn)和考試,考勤:15%作業(yè)(15%):1次/1~2周考試(70%):閉卷考試實(shí)驗(yàn)(單獨(dú)考試):9次,第一章匯編語(yǔ)言基礎(chǔ)知識(shí),1.1匯編語(yǔ)言簡(jiǎn)介1.2計(jì)算機(jī)中數(shù)據(jù)的表示1.3計(jì)算機(jī)組織,1.1匯編語(yǔ)言簡(jiǎn)介,1.1.1什么是匯編語(yǔ)言1.1.2為什么要學(xué)習(xí)匯編語(yǔ)言,1.1.1什么是匯編語(yǔ)言,機(jī)器指令:cpu能直接識(shí)別并遵照?qǐng)?zhí)行的指令,用二進(jìn)制編碼表示,由操作碼,操作數(shù)組成,編碼只含二進(jìn)制0或1。機(jī)器語(yǔ)言:用二進(jìn)制編碼組成的機(jī)器指令的集合和一組使用機(jī)器指令的規(guī)則。匯編語(yǔ)言:對(duì)機(jī)器指令中的操作碼用英文單詞的縮寫描述(助記符),對(duì)操作數(shù)用標(biāo)號(hào)、變量、常量描述。,,用匯編語(yǔ)言編寫的程序稱為匯編源程序。匯編語(yǔ)言是一種符號(hào)語(yǔ)言,比機(jī)器語(yǔ)言容易理解和掌握,也容易調(diào)試和維護(hù)。但是,匯編語(yǔ)言源程序要翻譯成機(jī)器語(yǔ)言程序才可以由計(jì)算機(jī)執(zhí)行。這個(gè)翻譯的過(guò)程稱為“匯編”,這種把匯編源程序翻譯成目標(biāo)程序的語(yǔ)言加工程序稱為匯編程序。,1.1.2為什么要學(xué)習(xí)匯編語(yǔ)言,匯編語(yǔ)言程序是用符號(hào)指令寫成的,本質(zhì)上是機(jī)器語(yǔ)言。與具體機(jī)器的機(jī)型的硬件密切相關(guān),可以直接有效地控制計(jì)算機(jī)硬件,程序運(yùn)行速度快,程序短小精悍,占用內(nèi)存少,在某些特殊應(yīng)用場(chǎng)合更能發(fā)揮作用。如:智能化儀表家用電器實(shí)時(shí)控制系統(tǒng)單片機(jī)控制病毒研究等。使用匯編語(yǔ)言能從根本上認(rèn)識(shí)和理解計(jì)算機(jī)的工作過(guò)程,它可直接而精確地控制計(jì)算機(jī)硬件的操作。學(xué)習(xí)匯編語(yǔ)言對(duì)從事計(jì)算機(jī)的研究和開(kāi)發(fā)有著重要的意義。所以,它作為一門計(jì)算機(jī)專業(yè)基礎(chǔ)課,并對(duì)計(jì)算機(jī)專業(yè)今后課程的學(xué)習(xí)是非常重要的。,1.1.3匯編語(yǔ)言的特點(diǎn),與機(jī)器有關(guān):移植性差,但可直接控制硬件。程序效率高。編寫匯編語(yǔ)言源程序比編寫高級(jí)語(yǔ)言源程序煩瑣。調(diào)試?yán)щy。,1.2計(jì)算機(jī)中數(shù)據(jù)的表示,1.2.1不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)的運(yùn)算1.2.3帶符號(hào)數(shù)的表示1.2.4補(bǔ)碼的加法和減法1.2.5無(wú)符號(hào)數(shù)的表示1.2.6字符的表示1.2.7基本邏輯運(yùn)算,1.2.1不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換,1.進(jìn)位計(jì)數(shù)制對(duì)于任意一個(gè)進(jìn)位計(jì)數(shù)制,如果用R表示基數(shù),那么任何一個(gè)數(shù)S均可用如下多項(xiàng)式表示:S=knRn+kn-1Rn-1+…+k0R0+k-1R-1+k-2R-2+…+k-mR-m,,十進(jìn)制數(shù):123.6(D)=110^2+210^1+310^0+610^(-1)各位權(quán)值10^k二進(jìn)制數(shù):101101(B)=12^5+12^3+12^2+12^0=45(D)各位權(quán)值2^k十六進(jìn)制數(shù):5F(H)=516^1+1516^0(D)各位權(quán)值16^k,,在書寫不同進(jìn)位計(jì)數(shù)制數(shù)時(shí),常常在尾部用一個(gè)字母來(lái)表示該數(shù)是什么進(jìn)位計(jì)數(shù)制的數(shù)。結(jié)尾用B(2進(jìn)制數(shù))、O(8進(jìn)制數(shù))、D(10進(jìn)制數(shù))、H(16進(jìn)制數(shù))。缺省為十進(jìn)制數(shù)。例如712O、9198D、10010B、BE49H等等。,,2.各種數(shù)制間的相互轉(zhuǎn)換例如:13.8125D=1101.1101B=D.DH,,二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)方法:各位二進(jìn)制數(shù)碼乘以對(duì)應(yīng)的權(quán)之和例:1.1十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)方法:各位十六進(jìn)制數(shù)碼乘以對(duì)應(yīng)的權(quán)之和例:1.2,,十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)(1)降冪法:先寫出小于此數(shù)的各位二進(jìn)制權(quán)值,然后再求和。(適用于數(shù)值不大的數(shù))例:1.3(2)除法:不斷除以2,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分)例:1.4,,對(duì)于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不斷乘2,并計(jì)下整數(shù),而小數(shù)部分再乘2,直到結(jié)果為0為止。并非所有的十進(jìn)制小數(shù)都能用二進(jìn)制完全表示,可按需要取一定精度即可。例:1.5,,十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)(1)降冪法:先寫出小于此數(shù)的各位十六進(jìn)制權(quán)值,然后再求和。(適用于數(shù)值不大的數(shù))例:1.6(2)除法:不斷除以16,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分)例:1.7,,對(duì)于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不斷乘16,并計(jì)下整數(shù),而小數(shù)部分再乘16,直到結(jié)果為0為止。并非所有的十進(jìn)制小數(shù)都能用十六進(jìn)制完全表示,可按需要取一定精度即可。,,二進(jìn)制數(shù)和十六進(jìn)制數(shù)的相互轉(zhuǎn)換直接轉(zhuǎn)換,每四位一組,整數(shù)從低位開(kāi)始,小數(shù)從高位開(kāi)始,不足位補(bǔ)0。例:1.8,1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)運(yùn)算,二進(jìn)制運(yùn)算加法規(guī)則:0+0=01+0=10+1=11+1=0(進(jìn)位1)乘法規(guī)則:00=010=001=011=1十六進(jìn)制數(shù)運(yùn)算原則:逢十六進(jìn)一例1.9,1.10,1.11,1.2.3帶符號(hào)數(shù)的表示,帶符號(hào)數(shù)最高位是符號(hào)位。正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。表示方法:原碼、補(bǔ)碼、反碼。,,,,,數(shù)的補(bǔ)碼表示定義:(X>=0時(shí))[X]補(bǔ)=符號(hào)+|X|------(1)(X<0時(shí))[X]補(bǔ)=2^n-|X|=(2^n-1-|X|)+1---(2)即X<0時(shí):[X]補(bǔ)+|X|=2^n數(shù)的補(bǔ)碼具體操作是:正數(shù)不變,負(fù)數(shù)則用絕對(duì)值取反+1,,例1.12[X]補(bǔ)求補(bǔ)等于[-X]補(bǔ)等于|X|(X實(shí)踐性很強(qiáng),結(jié)合上機(jī)是最好的學(xué)習(xí)方法。,2.1匯編語(yǔ)言程序?qū)嵗?2.1.1實(shí)例12.1.2實(shí)例2,例2.1單個(gè)字符的鍵盤輸入與顯示輸出程序,codesegmentassumecs:codestart:movah,1int21hmovdl,aladddl,1movah,2int21hmovah,4chint21hcodeendsendstart運(yùn)行結(jié)果:鍵入A接著顯示B,鍵入K接著顯示L,例2.2編寫顯示“HELLO,WORLD!”程序。,datasegmentStringdb‘HELLO,WORLD!$’dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetstringmovah,9int21hmovah,4chint21hcodeendsendstart,2.2工作環(huán)境及上機(jī)操作,2.2.1匯編語(yǔ)言的系統(tǒng)工作文件2.2.2進(jìn)入DOS命令行方式2.2.3編輯建立ASM源程序文件2.2.4匯編產(chǎn)生OBJ二進(jìn)制目標(biāo)文件2.2.5連接產(chǎn)生EXE可執(zhí)行文件2.2.6程序的運(yùn)行和調(diào)試,2.2.1匯編語(yǔ)言的系統(tǒng)工作文件,使用編輯程序編輯源程序文件(.asm)使用匯編程序(MASM)將源程序文件(.asm)匯編成目標(biāo)文件(.obj)使用連接程序(LINK),將目標(biāo)文件(.obj)連接成可執(zhí)行文件(.EXE)使用調(diào)式程序(DEBUG),調(diào)式可執(zhí)行文件,運(yùn)行匯編語(yǔ)言程序需要以下文件,編輯程序EDIT.COM匯編程序MASM.EXE連接程序LINK.EXE調(diào)試程序DEBUG.EXE,注意幾點(diǎn),本書使用MicrosoftMasm6.0版本。EDIT.COM和DEBUG.EXE為系統(tǒng)自帶。MASM.EXE和LINK.EXE不是系統(tǒng)自帶。為方便操作,系統(tǒng)文件和用戶文件盡可能放在同一文件目錄下。,2.2.2進(jìn)入DOS命令行方式,程序---附件---命令提示符運(yùn)行---CMD退出用EXIT,2.2.3編輯建立ASM源程序文件,利用EDIT編輯源文件:C>EDIT↓C>EDIT文件名.ASM↓例如文件名為Hello.ASM在EDIT程序中,將我們編寫的匯編程序輸入到計(jì)算機(jī)中,并將Hello.ASM保存為源程序。然后退出EDIT程序,回到DOS狀態(tài)。,2.2.4匯編產(chǎn)生OBJ二進(jìn)制目標(biāo)文件,源程序建立后,就要用匯編程序?qū)υ闯绦騾R編,匯編后產(chǎn)生二進(jìn)制的目標(biāo)文件(OBJ文件),其操作與匯編程序回答如下:C>MASMHello.ASM↓Microsoft(R)MacroAssmblerVersion5.0Copyright(C)MicrosoftCorp1981-1985,1987,AllrightsreservedObjectfilename[Hello.OBJ]:↓Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:51646+447778Bytessymbolspacefree0WarningErrors0SevereErrors說(shuō)明:Hello.OBJ目標(biāo)文件,這是匯編的主要目的Hello.LST列表文件,可有可無(wú)Hello.CRF交叉引用表,可有可無(wú)0WarningErrors0個(gè)警告錯(cuò)誤0SevereErrors0個(gè)嚴(yán)重錯(cuò)誤,2.2.5連接產(chǎn)生EXE可執(zhí)行文件,匯編程序已產(chǎn)生出二進(jìn)制的目標(biāo)文件(OBJ),但OBJ文件并不是可執(zhí)行文件,還必須用連接程序(LINK)把OBJ文件轉(zhuǎn)換為可執(zhí)行的EXE文件。當(dāng)然,如果一程序由多個(gè)模塊組成時(shí),也應(yīng)該通過(guò)LINK把它們連接在一起。操作如下:C>LINKHello.OBJ↓C>LINKHello1+Hello2+Hello3↓Runfile[Hello.ASM.EXE]:↓ListFile[NUL.MAP]:Libraries[.LIB]:LINK:WarningL4012:nostacksegment一般情況下,用戶只需要按回車使用默認(rèn)值就可以了。兩個(gè)輸入文件兩個(gè)輸出文件OBJ文件EXE文件LIB文件(庫(kù)文件)MAP文件(連接映像文件),2.2.6程序的運(yùn)行和調(diào)試,建立了EXE文件后,就可以直接在DOS的提示符下,輸入EXE文件的文件名,如:C>Hello↓直接運(yùn)行程序。對(duì)EXE文件無(wú)需擴(kuò)展名就可執(zhí)行。真正的可執(zhí)行文件是生成的,不是用改名操作得到的。,,調(diào)試程序DEBUG.EXE是WINDOWS系統(tǒng)自帶的。DEBUGHello.EXE“-”DEBUG命令提示符,2.3DEBUG主要命令,格式如下:C:\>DEBUG或C:\>DEBUG[盤符][路徑][要調(diào)試的程序]DEBUG中的數(shù)據(jù)顯示均為十六進(jìn)制。,1.反匯編命令U,格式1:U地址地址用偏移地址或者段地址:偏移地址表示。該命令從指定的地址開(kāi)始,把機(jī)器語(yǔ)言反匯編為匯編語(yǔ)言。若省去指定地址,則以上一個(gè)U命令反匯編的最后一條指令地址的下一個(gè)單元作為起始地址。格式2:U范圍范圍用a1a2或者aLb表示。對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編,范圍可以由起始地址、結(jié)束地址或起始地址及長(zhǎng)度來(lái)確定。,2.顯示內(nèi)存命令D,格式1:D地址從指定的地址開(kāi)始,顯示內(nèi)存,便于用戶看數(shù)據(jù)。格式2:D范圍顯示指定范圍的內(nèi)存內(nèi)容。,3.運(yùn)行程序命令G,格式:G[=起始地址][中止地址]起始地址規(guī)定了執(zhí)行的起始地址。中止地址是斷點(diǎn)地址,讓程序暫停在某個(gè)位置=不能省掉。若省掉起始地址,則以當(dāng)前CS:IP作為起始地址。默認(rèn)段地址在段寄存器CS中。,4.寄存器顯示和修改命令R,格式1:R顯示所有寄存器內(nèi)容和全部標(biāo)志的狀態(tài)。格式2:R寄存器名顯示和修改寄存器內(nèi)容,若不修改其內(nèi)容,則按CR鍵;若要修改,可輸入修改后的1~4個(gè)16進(jìn)制字符值,再按CR鍵。格式3:RF顯示FLAGS寄存器并接受新值。,5.跟蹤程序命令T?Q,格式1:T[=起始地址]單步執(zhí)行程序,在指令執(zhí)行中逐條進(jìn)行跟蹤,若省去地址,則從CS:IP現(xiàn)行值執(zhí)行。格式2:T[=起始地址][指令條數(shù)]可對(duì)多條指令進(jìn)行跟蹤。注意:對(duì)于INT指令不能使用T命令跟蹤。,,,-A匯編命令(輸入程序)格式:A[地址]-N文件命名命令格式:N文件名-L裝入命令格式:L地址驅(qū)動(dòng)器扇區(qū)號(hào)扇區(qū)數(shù)L地址,,-W寫命令格式:W地址驅(qū)動(dòng)器扇區(qū)號(hào)區(qū)段數(shù)W地址-E修改內(nèi)存單元內(nèi)容格式1:E地址內(nèi)容表用給定的內(nèi)容表去代替指定范圍的內(nèi)存單元的內(nèi)容格式2:E地址可連續(xù)逐個(gè)修改內(nèi)存單元的內(nèi)容。按CR鍵結(jié)束E命令-H十六進(jìn)制運(yùn)算命令格式:-Hval1val2輸出為val1+val2val1-val2,,-M移動(dòng)命令格式:-Mrangeaddress-Q退出命令格式:-Q該命令退出DEBUG程序,并返回到DOS-?查看命令格式格式:-?顯示全部DEBUG命令格式,2.4常用的DOS命令,MD建立目錄E:\>MDMASM建立MASM目錄CD顯示或改變當(dāng)前目錄E:\>CD顯示當(dāng)前目錄E:\>CDMASM進(jìn)入MASM目錄E:\MASM>CD..退到上一目錄E:\MASM>CD\退到根目錄E:,,RD刪除目錄E:\>RDMASM刪除MASM目錄DIR顯示目錄或文件E:\>DIR列出當(dāng)前目錄下的子目錄和文件E:\>DIR*.ASM列出所有擴(kuò)展名為ASM的文件,*為通配符E:\>DIRHELLO.*列出所有名為HELLO而擴(kuò)展名不限的文件E:\>DIRHE*.???列出所有名前兩個(gè)字符為HE,而擴(kuò)展名為三個(gè)字符的文件,,REN改變文件名E:\>RENH1.TXTH2.TXTCOPY復(fù)制文件E:\>COPYH1.TXTH2.TXTE:\>COPYA+BC.TXT,,TYPE顯示文本文件的內(nèi)容E:\>TYPYH1.TXTCLS清屏SETPATH設(shè)置或顯示可執(zhí)行文件的搜索路徑E:\>PATH顯示可執(zhí)行文件的搜索路徑E:\>SETPATH顯示可執(zhí)行文件的搜索路徑,,HELP顯示命令格式和用法E:\>HELP顯示所有命令的格式E:\>HELPDIR顯示DIR命令的用法>輸出的重定向E:\>DIR>C.TXT把DIR顯示結(jié)果輸出到文件C.TXT,2.5幾個(gè)常用的DOS系統(tǒng)功能調(diào)用,21H號(hào)中斷是DOS提供給用戶的用于調(diào)用系統(tǒng)功能的中斷,它有近百個(gè)功能供用戶選擇使用,主要包括設(shè)備管理、目錄管理和文件管理三個(gè)方面的功能。匯編語(yǔ)言程序設(shè)計(jì)需要采用系統(tǒng)的各種功能程序。,功能調(diào)用的格式,通常按照如下4個(gè)步驟進(jìn)行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H,實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況,1.鍵盤輸入一個(gè)字符并回顯,DOS功能調(diào)用INT21H功能號(hào):AH=01H出口參數(shù):AL=輸入字符的ASCII碼功能:等待從鍵盤輸入一個(gè)字符,該字符的ASCII碼送AL,并送屏幕顯示。調(diào)用此功能時(shí),若無(wú)輸入,則會(huì)一直等待,直到輸入后才繼續(xù)。,,movah,01h;功能號(hào):ah←01hint21h;功能調(diào)用cmpal,’Y’;處理出口參數(shù)aljeyeskey;是“Y”cmpal,’N’jenokey;是“N”yeskey:...nokey:...,2.顯示一個(gè)字符,DOS功能調(diào)用INT21H功能號(hào):AH=02H入口參數(shù):DL=輸出字符功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位置。,,在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào)movah,02h;設(shè)置功能號(hào):ah←02hmovdl,?;提供入口參數(shù):dl←?int21h;DOS功能調(diào)用:顯示問(wèn)號(hào),3.顯示字符串,DOS功能調(diào)用INT21H功能號(hào):AH=09H入口參數(shù):DS:DX=欲顯示字符串在主存中的首地址;字符串應(yīng)以$(24H)結(jié)束功能:顯示由DS:DX指定的字符串,,stringdbHello,Everybody!$‘;在數(shù)據(jù)段定義要顯示的字符串...movah,09h;設(shè)置功能號(hào)ah←09hmovdx,offsetstring;提供入口參數(shù)dx←字符串的偏移地址int21h;DOS功能調(diào)用字符串顯示,4.鍵盤輸入到緩沖區(qū),DOS功能調(diào)用INT21H功能號(hào):AH=0AH入口參數(shù):DS:DX=緩沖區(qū)首地址(DS:DX)=緩沖區(qū)字節(jié)數(shù)功能:輸入到緩沖區(qū),緩沖區(qū)的定義,第1字節(jié)事先填入最多欲接收的字符個(gè)數(shù)(包括回車字符,可以是1~255)第2字節(jié)將存放實(shí)際輸入的字符個(gè)數(shù)(不包括回車符)第3字節(jié)開(kāi)始將存放輸入的字符串實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多出的字符丟掉,且響鈴,,bufferdb81;定義緩沖區(qū);第1個(gè)字節(jié)填入可能輸入的最大字符數(shù)db?;存放實(shí)際輸入的字符數(shù)db81dup(?);存放輸入的字符串...movdx,segbuffer;偽指令seg取得buffer的段地址movds,dx;設(shè)置數(shù)據(jù)段DSmovdx,offsetbuffermovah,0ahint21h,5.寫文件或設(shè)備,DOS功能調(diào)用INT21H功能號(hào):AH=40H入口參數(shù):DS:DX=數(shù)據(jù)區(qū)首地址BX=文件代號(hào)CX=寫入的字節(jié)數(shù)功能:把數(shù)據(jù)區(qū)內(nèi)容輸出到文件或設(shè)備,,MOVAH,40H;設(shè)置功能號(hào)AH←40HLEADX,STR;設(shè)置數(shù)據(jù)區(qū)首地址MOVBX,1;文件代號(hào)1表示標(biāo)準(zhǔn)設(shè)備顯示器MOVCX,9;輸出9個(gè)字節(jié)INT21H;,6.結(jié)束程序返回DOS,DOS功能調(diào)用INT21H功能號(hào):AH=4CH入口參數(shù):AL=返回碼功能:結(jié)束程序返回DOSMOVAH,4CHINT21H,第三章指令系統(tǒng)和尋址方式,3.1尋址方式3.2指令系統(tǒng)3.380386后繼機(jī)型的新增擴(kuò)展指令和尋址方式,3.1尋址方式,3.1.1指令結(jié)構(gòu)3.1.2操作數(shù)的尋址方式,,計(jì)算機(jī)中的指令由操作碼和操作數(shù)組成。操作數(shù)字段可以有一個(gè)、兩個(gè)或三個(gè),通常稱為一地址、二地址或三地址指令。二地址指令中兩個(gè)操作數(shù)分別稱為源操作數(shù)和目的操作數(shù)。所謂尋址方式就是指令中尋找操作數(shù)的方式。,3.1.1指令結(jié)構(gòu),80 x86匯編語(yǔ)言指令的一般格式位:[標(biāo)號(hào):]指令助記符[操作數(shù)][;注釋][]中的內(nèi)容位可選項(xiàng)。,,標(biāo)號(hào):符號(hào)地址,表示指令在內(nèi)存中的位置。標(biāo)號(hào)后應(yīng)加冒號(hào):。指令助記符:指令名稱,是指令功能的英文縮寫。操作數(shù):指令要操作的數(shù)據(jù)或數(shù)據(jù)所在的地址。寄存器,常量,變量,表達(dá)式。注釋:每行以分號(hào)“;”開(kāi)頭,匯編程序不處理。,3.1.2操作數(shù)的尋址方式,立即尋址方式操作數(shù)就在指令中,緊跟在操作碼之后,操作數(shù)作為指令的一部分存放在代碼段。例MOVAL,5H執(zhí)行完此條指令后(AL)=05HMOVAX,3064H,,注意:,執(zhí)行時(shí)無(wú)需去內(nèi)存取數(shù),因此稱為立即數(shù)。主要用于寄存器賦初值。立即數(shù)只能作為源操作數(shù),并且長(zhǎng)度與目的操作數(shù)一致。,,寄存器尋址方式操作數(shù)就是寄存器中的值。指令中給出寄存器名。例MOVAL,BLMOVAX,BXMOVAL,BX錯(cuò)MOVAX,BL錯(cuò),注意:,以上兩種尋址方式都與存儲(chǔ)器無(wú)關(guān)。以下各種尋址方式的操作數(shù)都在存儲(chǔ)器中。偏移地址也稱為有效地址(EA)。,,直接尋址方式操作數(shù)的有效地址EA就在指令中。機(jī)器默認(rèn)段地址在DS中。,,例3.4例3.5例3.6,,寄存器間接尋址方式操作數(shù)的有效地址在寄存器中,只允許使用BX、BP、SI和DI寄存器。物理地址=16dx(DS)+(BX)物理地址=16dx(DS)+(SI)物理地址=16dx(DS)+(DI)物理地址=16dx(SS)+(BP),,例3.7,,寄存器相對(duì)尋址方式操作數(shù)的有效地址是寄存器和位移量之和。位移量可以是8位/16位的常量,也可以是16位的符號(hào)地址。只允許使用BX、BP、SI和DI寄存器。默認(rèn)搭配和寄存器間接尋址方式一樣。例3.8,,,MOVAX,COUNT[SI]MOVAX,[COUNT+SI]當(dāng)COUNT為16位位移量的符號(hào)地址時(shí):如DS=3000H,SI=2000H,COUNT=4000H;(36000H)=34H,(36001H)=12H物理地址=16dx(段值)+EA=30000H+2000H+4000H=36000H,,基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器內(nèi)容之和。物理地址=16dx(DS)+(BX)+(SI)物理地址=16dx(DS)+(BX)+(DI)物理地址=16dx(SS)+(BP)+(SI)物理地址=16dx(SS)+(BP)+(DI),,,相對(duì)基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器以及一個(gè)位移量之和?;芳拇嫫鰾X和BP,變址寄存器SI和DI。默認(rèn)段寄存器搭配和寄存器間接尋址方式一樣。例3.10,,注意,雙操作數(shù)指令的兩個(gè)操作數(shù)中,只能有一個(gè)使用存儲(chǔ)器尋址方式。雙操作數(shù)指令的兩個(gè)操作數(shù),長(zhǎng)度須匹配。操作數(shù)的有效地址前可以加段跨越前綴,但在以下三種情況下不允許:串處理指令的目的串必須用ES段PUSH指令的目的和POP指令的源必須用SS段指令必須存放在CS段,3.2指令系統(tǒng),3.2.1數(shù)據(jù)傳送指令3.2.2類型擴(kuò)展指令3.2.3算術(shù)運(yùn)算指令3.2.4邏輯指令3.2.5移位指令3.2.6串操作指令3.2.7程序轉(zhuǎn)移指令3.2.8處理器控制指令,,8086指令系統(tǒng)可以分為八組:(1)數(shù)據(jù)傳送指令(2)類型擴(kuò)展指令(3)算術(shù)運(yùn)算指令(4)邏輯指令(5)移位指令(6)串操作指令(7)程序轉(zhuǎn)移指令(8)處理機(jī)控制指令,3.2.1數(shù)據(jù)傳送指令,通用數(shù)據(jù)傳送指令累加器專用傳送指令地址傳送指令標(biāo)志寄存器傳送,1.通用數(shù)據(jù)傳送指令,MOV傳送PUSH進(jìn)棧POP出棧XCHG交換,(1)MOV傳送指令,格式:MOVDST,SRC操作:(DST)←(SRC)DST表示目的操作數(shù),SRC表示源操作數(shù)。功能:將源操作數(shù)傳送到目的操作數(shù)。,雙操作數(shù)指令的規(guī)定,源操作數(shù)與目的操作數(shù)的長(zhǎng)度必須一致。源操作數(shù)與目的操作數(shù)不能同時(shí)為存儲(chǔ)器。目的操作數(shù)不能為CS和IP,因?yàn)镃S:IP是程序當(dāng)前地址。,,例3.11例3.12例3.13例3.14例3.15例3.16,(2)PUSH進(jìn)棧指令,格式:PUSHSRC操作:(SP)←(SP)-2((SP)+1,(SP))←(SRC)堆棧:后進(jìn)先出內(nèi)存區(qū),以字為單位傳送,SS:SP總是指向棧頂。例3.17,(3)POP出棧指令,格式:POPDST操作:(DST)←((SP)+1,(SP))(SP)←(SP)+2例3.18,(4)XCHG交換指令,格式:XCHGOPR1,OPR2操作:(OPR1)(OPR2)功能:把兩個(gè)操作數(shù)互換位置。遵循雙操作數(shù)指令的規(guī)定,但操作數(shù)不能為立即數(shù)。例3.19,,2.累加器專用傳送指令,IN;從I/O端口輸入OUT;向I/O端口輸出XLAT;換碼其中I/O端口是CPU與外設(shè)傳送數(shù)據(jù)的接口,單獨(dú)編址,不屬于內(nèi)存,端口地址范圍0000~FFFFH.這組指令只限于AX,AL累加器。,(1)IN輸入指令,長(zhǎng)格式:INAL,PORT(字節(jié));00~FFHINAX,PORT(字)操作:AL←(PORT)AX←(PORT)功能:把端口PORT的數(shù)據(jù)輸入到累加器。,,短格式:INAL,DX(字節(jié));PORT放入DXINAX,DX(字)操作:AL←((DX))AX←((DX))功能:把DX指向的端口的數(shù)據(jù)輸入到累加器。,,例3.20例3.21,(2)OUT輸出指令,長(zhǎng)格式:OUTPORT,AL(字節(jié));00-FFHOUTPORT,AX(字)操作:PORT←ALPORT←AX功能:把累加器的數(shù)據(jù)輸出到端口PORT。,,短格式:OUTDX,AL(字節(jié));0000-FFFFHOUTDX,AX(字)操作:(DX)←AL(DX)←AX功能:把累加器的數(shù)據(jù)輸出到DX指向的端口。例3.22,(3)XLAT換碼指令,格式:XLAT操作:AL←(BX+AL)功能:把BX+AL的值作為有效地址,取出其中的一個(gè)字節(jié)送AL。例3.23,3.地址傳送指令,LEA有效地址送寄存器LDS指針?biāo)图拇嫫骱虳SLES指針?biāo)图拇嫫骱虴S,(1)LEA有效地址送寄存器指令,格式:LEAREG,SRC操作:REG←SRC功能:把源操作數(shù)的有效地址EA送到指定的寄存器。例3.24例3.25,(2)LDS指針?biāo)图拇嫫骱虳S指令,格式:LDSREG,SRC操作:REG←(SRC)DS←(SRC+2)功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和DS。例3.26,(3)LES指針?biāo)图拇嫫骱虴S指令,格式:LESREG,SRC操作:REG←(SRC)ES←(SRC+2)功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和ES。例如LESDI,[10H]DS=C000H,(C0010H)=0180H,(C0012H)=2000H結(jié)果DI=0180H,ES=2000H,4.標(biāo)志寄存器傳送指令,LAHF標(biāo)志寄存器FLAGS的低字節(jié)送AHSAHFAH送FLAGS的低字節(jié)PUSHF標(biāo)志進(jìn)棧POPF標(biāo)志出棧以上傳送類指令均不影響標(biāo)志位,除SAHF,POPF外.,3.2.2類型擴(kuò)展指令,CBW:AL擴(kuò)展為AXCWD:AX擴(kuò)展為DX,AX擴(kuò)展方法為符號(hào)擴(kuò)展。例3.28例3.29,3.2.3算術(shù)運(yùn)算指令,加法指令減法指令乘法指令除法指令,1.加法指令,ADD加法ADC帶進(jìn)位加法INC加1,(1)ADD加法指令,格式:ADDDST,SRC操作:(DST)←(DST)+(SRC)例3.30,溢出判斷,以8位二進(jìn)制數(shù)為例,,,綜上所述,CF=1為無(wú)符號(hào)數(shù)的溢出,OF=1為有符號(hào)數(shù)的溢出.OF位:若兩個(gè)操作數(shù)的符號(hào)相同,而結(jié)果的符號(hào)與之相反時(shí)OF=1,否則OF=0。CF位:有進(jìn)位/借位時(shí)CF=1,否則CF=0。,(2)ADC帶進(jìn)位加法指令,格式:ADCDST,SRC操作:(DST)←(DST)+(SRC)+CF例3.31,,(3)INC加1指令,格式:INCOPR操作:(OPR)←(OPR)+1,,除INC不影響CF,它們都影響條件標(biāo)志位.條件標(biāo)志位(條件碼)最主要有:進(jìn)位CF,零ZF,符號(hào)SF,溢出OF,2.減法指令,SUB減法SBB帶借位減法DEC減1NEG求補(bǔ)CMP比較,(1)SUB減法指令,格式:SUBDST,SRC操作:(DST)←(DST)-(SRC),(2)SBB帶借位減法指令,格式:SBBDST,SRC操作:(DST)←(DST)-(SRC)-CF,(3)DEC減1指令,格式:DECOPR操作:(OPR)←(OPR)-1,(4)NEG求補(bǔ)指令,格式:NEGOPR操作:(OPR)←-(OPR)功能:對(duì)OPR求補(bǔ),求-OPR,即反碼+1.只有OPR為0時(shí),CF=0。,(5)CMP比較指令,格式:CMPOPR1,OPR2操作:(OPR1)-(OPR2)不回送結(jié)果,只產(chǎn)生標(biāo)志位。,,CF=1為無(wú)符號(hào)數(shù)溢出,OF=1為有符號(hào)數(shù)溢出.例3.32例3.33例3.34例3.35,3.乘法指令,MUL無(wú)符號(hào)數(shù)乘法IMUL有符號(hào)數(shù)乘法,(1)MUL無(wú)符號(hào)數(shù)乘法指令,格式:MULSRC操作:操作數(shù)為字節(jié)時(shí):(AX)←(AL)X(SRC)操作數(shù)為字時(shí):(DX,AX)←(AX)X(SRC),(2)IMUL帶符號(hào)數(shù)乘法指令,格式:IMULSRC操作:操作數(shù)為字節(jié)時(shí):(AX)←(AL)X(SRC)操作數(shù)為字時(shí):(DX,AX)←(AX)X(SRC),,兩個(gè)相乘的數(shù)必須長(zhǎng)度相同。SRC不能是立即數(shù)。例3.36,4.除法指令,DIV無(wú)符號(hào)數(shù)除法IDIV有符號(hào)數(shù)除法,(1)DIV無(wú)符號(hào)數(shù)除法指令,(2)IDIV帶符號(hào)數(shù)除法指令,格式:IDIVSRC操作與DIV相同余數(shù)和被除數(shù)同符號(hào)。被除數(shù)長(zhǎng)度應(yīng)為除數(shù)長(zhǎng)度的兩倍。SRC不能是立即數(shù)。例3.37例3.38,算術(shù)運(yùn)算綜合舉例,例3.39,5.十進(jìn)制調(diào)整指令,前面提到的所有算術(shù)運(yùn)算指令都是二進(jìn)制數(shù)的運(yùn)算,為便于十進(jìn)制計(jì)算,計(jì)算機(jī)提供了十進(jìn)制調(diào)整指令,在二進(jìn)制數(shù)計(jì)算的基礎(chǔ)上,給予十進(jìn)制調(diào)整,直接得到十進(jìn)制結(jié)果。,,BCD碼(BinaryCodedDecimal):用二進(jìn)制編碼表示十進(jìn)制數(shù).四位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),由于四位二進(jìn)制數(shù)的權(quán)分別為8,4,2,1,所以又稱為8421碼.,,壓縮的BCD碼4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。非壓縮的BCD碼8位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),低4位為8421碼,高4位無(wú)意義。,(1)壓縮BCD碼調(diào)整指令,DAA;加法十進(jìn)制調(diào)整指令DAS;減法十進(jìn)制調(diào)整指令,,DAA;加法十進(jìn)制調(diào)整指令格式:DAA操作:IFCF=1orAL高4位是[A~F]THENAL+60H.IFAF=1orAL低4位是[A~F]THENAL+6,,例ADDAL,BL000010019DAA+0000010040000110113+011000010011BCD碼9+4的結(jié)果是(10011)BCD即13,,,?DAA使AL自動(dòng)+6IF每位BCD碼值>9THEN該位值加6例3.40BCD1=1834,BCD2=2789求:BCD331H,2-->32H,3-->33H,A-->41H4.BX循環(huán)左移4位。,,例5.5從鍵盤輸入一個(gè)四位的十六進(jìn)制數(shù)(其中字母為大寫),并將其轉(zhuǎn)換為二進(jìn)制數(shù)顯示輸出。算法分析1.輸入為數(shù)字0~9(ASCII碼30~39H),減30H,為大寫字母A~F(ASCII碼41~46H),減37H,將四次的輸入拼裝成四位十六進(jìn)制數(shù)存放在BX中;2.循環(huán)利用16次移位從左到右顯示BX寄存器中的二進(jìn)制數(shù)。,,例5.6從鍵盤接收八個(gè)英文字母,根據(jù)邏輯尺設(shè)立的標(biāo)志顯示輸出相鄰字符,標(biāo)志為0顯示其前驅(qū)字符,標(biāo)志為1顯示其后繼字符。算法分析1.循環(huán)次數(shù)已知,但每次循環(huán)所做的操作不同;2.設(shè)置標(biāo)志字,循環(huán)中依據(jù)標(biāo)志字中的標(biāo)志位選擇操作。,5.2.3條件循環(huán)程序,例5.7從鍵盤輸入一個(gè)單個(gè)字符,顯示該字符的ASCII碼(十六進(jìn)制),回車鍵退出循環(huán),終止程序。算法分析1.從鍵盤輸入一個(gè)單個(gè)字符,該字符的ASCII碼在AL中,為兩位十六進(jìn)制數(shù);2.把每位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,用2號(hào)功能輸出,高位為數(shù)字,低位為數(shù)字或A~F。3.回車鍵退出循環(huán)。,5.2.4條件計(jì)數(shù)循環(huán)程序,例5.8設(shè)置鍵盤緩沖區(qū)為16個(gè)字節(jié),從鍵盤輸入一串字符,然后再?gòu)逆I盤輸入一個(gè)單個(gè)字符,查找這個(gè)字符是否在字符串中出現(xiàn),如果找到,顯示該字符串,否則顯示‘NOTFOUND’。,5.2.5多重循環(huán)程序,例5.9顯示輸出20H~7EH的ASCII碼字符表,每行16個(gè)字符。例5.10有一個(gè)首地址為A的5個(gè)字的數(shù)組,請(qǐng)編程使該數(shù)組中的數(shù)從大到小排序.,,冒泡排序算法:KK=N-1DOWHILEKK>0;kk—DI共比較遍數(shù)K=KKI=0DOWHILEK>0;K—CX每遍比較次數(shù)IFA[I]=0)。遞歸定義:0!=1N!=N*(N-1)!計(jì)算N!的C語(yǔ)言遞歸程序:jc(intn){intc;if(n==0)c=1;elsec=n*jc(n-1);return(c);},第七章高級(jí)匯編語(yǔ)言技術(shù),宏匯編語(yǔ)言提供了類似于高級(jí)語(yǔ)言的某些復(fù)雜功能,如宏匯編、重復(fù)匯編與條件匯編,提高了使用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)的質(zhì)量和效率。,7.1宏匯編,宏是源程序中一段有獨(dú)立功能的程序代碼。它只需要在源程序中定義一次,就可以多次調(diào)用,調(diào)用時(shí)只需要用一個(gè)宏指令語(yǔ)句就可以了。宏功能既可以實(shí)現(xiàn)程序復(fù)用,又能方便的傳遞多個(gè)參數(shù)。,,子程序優(yōu)點(diǎn):省存儲(chǔ)空間優(yōu)化程序結(jié)構(gòu)便于調(diào)試和修改子程序缺點(diǎn):調(diào)用、返回、保存、恢復(fù)需花開(kāi)銷參數(shù)傳遞復(fù)雜因此,在程序較短,或需要傳送的參數(shù)較多的情況下,用宏匯編更加有利。,7.1.1宏定義、宏調(diào)用和宏展開(kāi),宏定義:宏指令名MACRO[形參1,形參2,…]ENDM宏定義體是一組有獨(dú)立功能的程序代碼。宏指令名給出宏定義的名稱,調(diào)用時(shí)就使用宏指令名來(lái)調(diào)用宏定義。第一個(gè)符號(hào)必須是字符。啞元表給出了宏定義中所用到的形式參數(shù),每個(gè)啞元之間用逗號(hào)隔開(kāi)。,,,宏調(diào)用:宏指令名[實(shí)參1,實(shí)參2,…]宏指令被定義后,在源程序中就可以直接調(diào)用,稱為宏調(diào)用。一般說(shuō)來(lái),實(shí)參的個(gè)數(shù)應(yīng)和形參的個(gè)數(shù)相等,但匯編程序并不要求它們必須相等。若實(shí)參個(gè)數(shù)大于形參個(gè)數(shù),則多余的實(shí)參不予考慮,若實(shí)參個(gè)數(shù)小于形參個(gè)數(shù),則多余的形參取空值。例:multiply240,BX,SAVE,,宏展開(kāi):在對(duì)源程序的匯編階段,匯編程序?qū)υ闯绦蛑械拿總€(gè)宏調(diào)用都進(jìn)行了宏展開(kāi),即用宏定義體取代源程序中宏指令名,用實(shí)參取代形參。應(yīng)該注意,用實(shí)參取代形參后,所得到的語(yǔ)句應(yīng)該是有效的,否則匯編程序?qū)?huì)指示出錯(cuò)。,,例:1pushdx1pushax1movax,2401imulBX1movSAVE,ax1movSAVE+2,dx1popax1popdx表示這些指令是由宏展開(kāi)而得到的(早期用+),,,例7.1用宏指令實(shí)現(xiàn)兩個(gè)八位有符號(hào)數(shù)的乘法。宏定義:imultiplyMACROx,y,resultpushaxmoval,ximulymovresult,axpopaxENDM,,宏展開(kāi):1pushax1moval,cl1imuldl1mov[bx],ax1popax┇1pushax1moval,ary1imulvar1movsave,ax1popax,宏調(diào)用:imultiplycl,dl,[bx]…imultiplyary,var,save,,例7.2某工廠工人的周工資由計(jì)時(shí)工資和計(jì)件工資組成,計(jì)時(shí)工資按每小時(shí)工資率RATE乘以工作小時(shí)數(shù)計(jì)算;計(jì)件工資按超定額部分乘以SUP計(jì)算(超定額=實(shí)際完成的工件數(shù)MADE-定額工件數(shù)PART),工資總額放在WAGE中。宏定義如下:wagesmacrorate,hout,made,part,supwage=rate*hout+(made-part)*supendmrate=5part=100sup=4,,宏調(diào)用:wagesrate,40,120,part,sup宏展開(kāi)為:wage=rate*40+(120-part)*sup,,從以上兩個(gè)例子可以看出,子程序和宏指令具有類似的功能,但又有以下區(qū)別:空間的區(qū)別:宏指令并不節(jié)省目標(biāo)程序的空間,而子程序在目標(biāo)程序中只有一段;時(shí)間的區(qū)別:宏指令在運(yùn)行時(shí)不需要其他額外的CPU開(kāi)銷,而子程序的調(diào)用、返回和保護(hù)現(xiàn)場(chǎng)、恢復(fù)現(xiàn)場(chǎng)需要占用時(shí)間;參數(shù)的區(qū)別:宏調(diào)用可實(shí)現(xiàn)多個(gè)參數(shù)的直接代換,方式簡(jiǎn)單靈活,而子程序參數(shù)傳遞麻煩。,宏調(diào)用和子程序調(diào)用工作方式的區(qū)別,7.1.2宏定義的嵌套,這種嵌套結(jié)構(gòu)的特點(diǎn)是外層宏定義的宏體中又有宏定義,只有調(diào)用外層宏定義一次后,才能調(diào)用內(nèi)層宏指令。例7.3用嵌套的宏定義實(shí)現(xiàn)兩個(gè)八位數(shù)的算術(shù)運(yùn)算。,,宏定義:mathMACROmathname,action,nummathnameMACROx,y,resulepushaxmovnum,xactionymovresultaxpopaxENDMENDM,,宏調(diào)用:mathimultiply,imul,al宏展開(kāi):imultiplyMACROx,y,resultpushaxmoval,ximulymovresult,axpopaxENDM,,宏調(diào)用:mathdivide,div,ax宏展開(kāi):divideMACROx,y,resultpushaxmovax,xdivymovresult,axpopaxENDM,,接下來(lái)可使用宏調(diào)用:divideary,var,save則宏展開(kāi)如下:1pushax1movax,ary1divvar1movsave,ax1popax,7.1.3宏定義中使用宏調(diào)用,宏定義中使用的宏調(diào)用必須已經(jīng)定義。例7.4用嵌套的宏定義實(shí)現(xiàn)字符顯示。宏定義:INT21MACROFUNCTNMOVAH,F(xiàn)UNCTNINT21HENDMDISPCMACROCHARMOVDL,CHARINT212ENDM,,宏調(diào)用:DISPC‘A’宏展開(kāi):1MOVDL,‘A’2MOVAH,22INT21H這里的2表示第二層展開(kāi)結(jié)果。,7.1.4帶間隔符的實(shí)參,在宏調(diào)用中,有時(shí)實(shí)參使用的是字符串(不是單引號(hào)括起來(lái)的),而是字符串中包含間隔符(如空格、逗號(hào)等),為使間隔符成為實(shí)參的一部分,則要用尖括號(hào)將字符串括起來(lái)作為一個(gè)實(shí)參的整體來(lái)替換形參。例7.5在數(shù)據(jù)段中定義40個(gè)字節(jié)的存儲(chǔ)空間。defdbmacrobuf,xbufxendmdatasegmentdefdbarray,dataends…宏展開(kāi)為:1arraydb40dup(?),7.1.5連接操作符否則對(duì)進(jìn)行匯編。,,條件匯編偽指令有八條:IF表達(dá)式;表達(dá)式不為0,則滿足條件IFE表達(dá)式;表達(dá)式為0,則滿足條件IFDEF符號(hào);符號(hào)已定義或被說(shuō)明為EXTRN,則滿足條件IFNDEF符號(hào);符號(hào)未定義或未說(shuō)明為EXTRN,則滿足條件IFB;變量為空,則滿足條件IFNB;變量不為空,則滿足條件IFIDN,;兩串相等,則滿足條件IFNIDN,;兩串不等,則滿足條件,,表達(dá)式可以是用關(guān)系操作符EQ,NE,LT,LE,GT,GE和邏輯運(yùn)算符AND,OR連接的布爾表達(dá)式。例7.16例7.17例7.18,,例7.16用宏指令MAX把三個(gè)變?cè)凶畲笾捣旁贏X中。變?cè)獋€(gè)數(shù)不同產(chǎn)生的程序段也不同。maxmacrok,a,b,clocalnext,out1movax,aif(kge2)and(kle3)ifkeq3cmpc,axjlenextmovax,cendifnext:cmpb,axjleout1movax,bendifout1:endm,,宏調(diào)用:max1,xmax2,x,ymax3,x,y,z宏展開(kāi):max1,x1movax,x1??0001:max2,x,y1movax,x1??0002:1cmpy,ax1jle??00031movax,y1??0003:,max3,x,y,z1movax,x1cmpz,ax1jle??00041movax,z1??0004:1cmpy,ax1jle??00051movax,y1??0005:,,例7.17求K的階乘,結(jié)果放在AX中。宏定義和子程序一樣,也可以遞歸調(diào)用。用條件偽操作可結(jié)束宏遞歸。powmacrokpopaxmovbl,kmulblpushaxk=k-1ifkge1powkendifendm,,宏調(diào)用:movax,1pushaxn=4pown,,宏展開(kāi):1popax1movbl,n1mulbl1pushax1n=n-12popdx2movbl,n2mulbl2pushax2n=n-1,3popax3movbl,n3mulbl3pushax3n=n-14popax4movbl,n4mulbl4pushax4n=n-1,,例7.18比較兩個(gè)字符串是否相等,若相等則STR=1,否則STR=2。datasegmentstr1db‘a(chǎn)bcdefgh’str2db‘a(chǎn)mkdefgh’ifidn,str=1elsestr=2endifdataends經(jīng)匯編后產(chǎn)生的LST列表文件可以看出STR=2,據(jù)此可以顯示“不相等”,第八章輸入輸出和中斷,,8.1I/O方式,程序直接控制I/O中斷DMA(直接內(nèi)存訪問(wèn))匯編使用系統(tǒng)提供的標(biāo)準(zhǔn)I/O程序,用dos系統(tǒng)功能調(diào)用int21h,8.1.1I/O端口,cpu與I/O設(shè)備通信有三種信息:控制,狀態(tài),數(shù)據(jù)(1)控制信息:從cpu輸出到I/O接口,用來(lái)控制設(shè)備動(dòng)作(2)狀態(tài)信息:從I/O輸入到cpu,表示設(shè)備當(dāng)前狀態(tài)(3)數(shù)據(jù)信息:輸入I/O?cpu,輸出cpu?I/O,,三種寄存器I/O接口部件有三種寄存器:數(shù)據(jù),狀態(tài),控制命令包含在主機(jī)cpu中,通過(guò)訪問(wèn)這些寄存器與外部設(shè)備交換數(shù)據(jù),把這些寄存器稱為端口port。,,端口編址0000~~ffffh其中00~ffh可直接指定,100h~ffffh須由dx間接尋址。,8.1.2I/O指令,(1)輸入(2)輸出,,8.1.3I/O的數(shù)據(jù)傳送控制方式,無(wú)條件傳送外設(shè)的數(shù)據(jù)傳送隨時(shí)可以進(jìn)行,而不需要cpu查詢外設(shè)的狀態(tài),用IN/OUT指令實(shí)現(xiàn)cpu與指定的外設(shè)寄存器之間的信息傳送。,,查詢傳送cpu不斷測(cè)試外設(shè)狀態(tài),等待與外設(shè)同步,當(dāng)多個(gè)設(shè)備要求傳送時(shí),依次查詢,順序即為優(yōu)先級(jí)。,,中斷傳送,,直接存儲(chǔ)器傳送DMA成批交互,DMA控制器8237A過(guò)程見(jiàn)P175。,8.2中斷,8.2.1中斷的概念中斷與中斷源中斷:由于某種事件的發(fā)生,使得cpu停止(中斷)正在執(zhí)行的程序,轉(zhuǎn)而去執(zhí)行處理該事件的程序,結(jié)束后,再繼續(xù)執(zhí)行先前被中斷的程序。中斷源:引起中斷的事件,,中斷源的分類:1.內(nèi)部中斷:軟件中斷,不需要外部硬件的支持,不受中斷標(biāo)志IF的限制。(1)中斷指令I(lǐng)NT(2)cpu錯(cuò)誤(3)為調(diào)試程序而設(shè)置的中斷:斷點(diǎn),,2.外部中斷:來(lái)自cpu外部,硬件中斷(1)不可屏蔽中斷源NMI:硬件故障(2)可屏蔽中斷源INTR:允許程序員確定是否處理。,,中斷類型號(hào):INTn------是中斷類型號(hào)中斷優(yōu)先級(jí)和中斷嵌套:從高到低內(nèi)中斷不可屏蔽可屏蔽單步中斷(調(diào)試),8.2.2中斷向量表,中斷向量:中斷程序的入口地址cs:ip中斷向量表:所有中斷處理程序的入口地址表,8.2.3中斷過(guò)程,分為四步:請(qǐng)求,響應(yīng),處理,返回1.請(qǐng)求:中斷源滿足一定條件,向cpu發(fā)出請(qǐng)求2.中斷響應(yīng):,8.3中斷處理程序設(shè)計(jì),分為主程序設(shè)計(jì)和中斷子程序設(shè)計(jì),,總復(fù)習(xí)1-7章,第一章基礎(chǔ)知識(shí),常用的ascii碼表回車:0dh換行:0ah空格:20h0~9:30h~39hA~Z:41h~5aha~z:61h~7ah,,Cpu寄存器:1.數(shù)據(jù):ax,bx,cx,dx2.指針:sp,bp3.變址寄存器:si,di4.段寄存器:cs,ds,ss,es5.控制寄存器:ip,flags(of,cf,zf,sf),,存儲(chǔ)器1.編址:按字節(jié)編址2.字:高字節(jié)在高地址,低字節(jié)在低地址3.存儲(chǔ)器分段:20位地址物理地址=16d*段地址+偏移地址,,外設(shè)接口:一組寄存器--狀態(tài),控制,數(shù)據(jù)編址:端口號(hào)大于0ffh,放入dx寄存器,第二章上機(jī)操作,工作環(huán)境編輯程序EDIT.EXE匯編程序MASM.EXE連接程序LINK.EXE調(diào)試程序DEBUG.EXE,,DEBUG主要命令-u-d-g-t-r,,常用dos功能調(diào)用P31,第三章PC機(jī)的指令系統(tǒng)和尋址方式,尋址方式1.立即尋址2.寄存器尋址3.直接尋址4.寄存器間接尋址5.寄存器相對(duì)尋址6.基址變址尋址7.相對(duì)基址變址尋址,,指令,,第四章偽指令與源程序格式,常用的偽指令1.數(shù)據(jù)定義:db,dw,dd,dq,dt,dup,ptr,label2.equ,=3.段定義:segment…..Endsassume,,過(guò)程定義proc………endpnear/far程序結(jié)束end$和org,,表達(dá)式中常用的操作符1.算術(shù):+,-,/,*,mod2.邏輯:AND,OR,XOR,NOT3.關(guān)系:EQ,NE,LT,GT,LE,GE4.數(shù)據(jù)回送:TYPE,LENGTH,SIZE,OFFSET,SEG,,匯編語(yǔ)言的一般格式返回控制臺(tái)的方法:pushdsmovah,4chsubax,axint21hpushax…ret,,,第五章循環(huán),分支,跳轉(zhuǎn)指令循環(huán)指令,第六章子程序設(shè)計(jì),格式調(diào)用和遞歸,第七章高級(jí)匯編技術(shù),宏定義格式macro…………endm宏調(diào)用local,%,&,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
19.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 安徽大學(xué) 匯編 語(yǔ)言程序設(shè)計(jì)
鏈接地址:http://zhongcaozhi.com.cn/p-12788696.html