資源描述:
《匯編語(yǔ)言55528》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、第三章匯編語(yǔ)言程序設(shè)計(jì)本章內(nèi)容匯編語(yǔ)言源程序的格式偽操作命令DOS及BIOS功能調(diào)用計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的演變1.機(jī)器語(yǔ)言直接用機(jī)器指令來(lái)編制計(jì)算機(jī)程序的方法。2.匯編語(yǔ)言可以用助記符來(lái)表示指令的操作和操作數(shù),也可以用標(biāo)號(hào)和符號(hào)來(lái)代替地址、常量和變量。3.高級(jí)語(yǔ)言更接近于人們的自然語(yǔ)言和習(xí)慣的教學(xué)語(yǔ)言來(lái)描述算法的執(zhí)行過(guò)程,從而使編寫(xiě)的過(guò)程更加直觀和簡(jiǎn)練。為什么要用匯編語(yǔ)言匯編語(yǔ)言非常接近機(jī)器語(yǔ)言程序,通過(guò)編制匯編語(yǔ)言程序,可以清楚地了解計(jì)算機(jī)的工作過(guò)程。現(xiàn)在的微機(jī)系統(tǒng)中,底層的一些功能仍然靠匯編語(yǔ)言程序來(lái)實(shí)現(xiàn)。匯編語(yǔ)言程序的效
2、率通常高于高級(jí)語(yǔ)言程序。舉例dataSEGMENTmsgDB'Hello,World!$'dataENDScodeSEGMENTASSUMECS:code,DS:dataMAINPROCNEARstart:MOVAX,dataMOVDS,AXLEADX,msgMOVAH,9hINT21hMOVAX,4C00hINT21hMAINENDPcodeENDSENDstart數(shù)據(jù)段代碼段在屏幕上顯示Hello,World!本例將在下文中多次提及,為方便計(jì),下文簡(jiǎn)稱(chēng)其為“Hello例”。結(jié)束語(yǔ)句分析1—分段結(jié)構(gòu)可以看出,匯編語(yǔ)言源程
3、序是分段結(jié)構(gòu)的形式。一個(gè)匯編源程序由若干個(gè)段(Segment)組成。每個(gè)段以SEGMENT語(yǔ)句開(kāi)始,以ENDS結(jié)束。整個(gè)源程序以END語(yǔ)句結(jié)尾。這里所說(shuō)的匯編語(yǔ)言源程序的段和第一章中的CPU管理的存儲(chǔ)器的段是不同的概念。匯編語(yǔ)言的段是邏輯段;8086CPU管理的存儲(chǔ)器的段是物理段(共有4個(gè):數(shù)據(jù)段、附加段、堆棧段、代碼段,對(duì)應(yīng)4個(gè)段寄存器:DS、ES、SS和CS)。一個(gè)匯編語(yǔ)言源程序中可以有多個(gè)邏輯段。上例中共有兩個(gè)邏輯段:data和code。分析2注:功能號(hào)09H的int21中斷功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備
4、上。入口參數(shù):AH=09HDS:DX=待輸出字符的地址說(shuō)明:待顯示的字符串以’$’作為其結(jié)束標(biāo)志代碼段開(kāi)頭執(zhí)行了一次功能號(hào)09H的21號(hào)DOS中斷,用于在屏幕上顯示字符串。關(guān)于DOS功能調(diào)用,后文將有詳細(xì)解釋。此處先列出功能號(hào)09H的21號(hào)DOS中斷的相關(guān)資料:最后兩行(MOVAX,4C00h、INT21h)也是一個(gè)DOS功能調(diào)用。注:功能號(hào)4CH的int21中斷功能描述:終止程序的執(zhí)行,并可返回一個(gè)代碼入口參數(shù):AH=4CHAL=返回的代碼匯編語(yǔ)言開(kāi)發(fā)過(guò)程源程序:文件名.asm目標(biāo)程序:文件名.obj可執(zhí)行文件:文件名.e
5、xeFinish編輯器,如notepad.exe匯編程序,如masm.exe鏈接程序,如link.exe調(diào)試程序,如debug.exe開(kāi)發(fā)工具(了解)X86+Windows平臺(tái)下常用的匯編編譯器有:Microsoft公司的MASMBorland公司的TASM開(kāi)源社區(qū)的NASMMASM是微軟推出的宏匯編語(yǔ)言,自發(fā)布以來(lái)已有多次版本更新,下頁(yè)表格中列出了幾個(gè)較為典型的版本。注:容易與之混淆的是MASM32,它是SteveHutchesson以個(gè)人名義發(fā)布、基于MASM而構(gòu)建的軟件包。其版本號(hào)和MASM的版本號(hào)是不同的,比如MAS
6、M32V8使用的匯編編譯器是MASM6。MASM32的最新版本為MASM32V12。MASM版本歷史(了解)MASM4.00最先廣泛使用的一個(gè)MASM版本,適用于DOS下的匯編編程MASM5.00開(kāi)始支持.code.data寫(xiě)法的段定義格式(即“簡(jiǎn)化段定義格式”)MASM6.001992年發(fā)布,可執(zhí)行文件名從Masm.exe改為Ml.exe開(kāi)始支持.if/.endif這樣的高級(jí)語(yǔ)法開(kāi)始支持invoke偽指令來(lái)簡(jiǎn)化帶參數(shù)的子程序調(diào)用MASM6.152000年4月發(fā)布MASM8.00隨VS2005一起發(fā)布開(kāi)發(fā)工具(了解)Mas
7、m5適合進(jìn)行DOS程序開(kāi)發(fā);Masm6以后的版本開(kāi)始支持Win32程序開(kāi)發(fā)。(微軟官方發(fā)布的Masm6所附的link.exe是SegmentedExecutableLinker,只能開(kāi)發(fā)DOS程序;要進(jìn)行Win32開(kāi)發(fā)必須配備IncrementalLinker,該類(lèi)型的link.exe可以從VisualStudio中獲取。開(kāi)發(fā)Win32程序推薦使用MASM32開(kāi)發(fā)包)開(kāi)發(fā)步驟演示(了解)使用MASM5.0開(kāi)發(fā)步驟演示(了解)使用MASM6.15ForDOS語(yǔ)句的類(lèi)型匯編語(yǔ)言源程序中的語(yǔ)句主要有以下兩種類(lèi)型:指令性語(yǔ)句指示性語(yǔ)
8、句指令性語(yǔ)句主要由CPU指令組成,對(duì)應(yīng)實(shí)際的機(jī)器指令;(比如“Hello例”中的MOVDS,AX)指示性語(yǔ)句又稱(chēng)偽操作語(yǔ)句,主要由偽操作指令組成。(比如“Hello例”中的codeSEGMENT)語(yǔ)句的組成匯編語(yǔ)言的語(yǔ)句可以有1~4個(gè)組成部分,如下所示:[名字]操作碼/偽操作碼[操作數(shù)][