




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日最新計(jì)算機(jī) 匯編語(yǔ)言程序設(shè)計(jì) 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日第第4章章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) l本章要點(diǎn) 4.1 匯編語(yǔ)言與匯編程序匯編語(yǔ)言與匯編程序 4.2 偽指令及其應(yīng)用偽指令及其應(yīng)用 4.3 匯編語(yǔ)言屬性操作符匯編語(yǔ)言屬性操作符 4.4基本結(jié)構(gòu)的程序設(shè)計(jì)基本結(jié)構(gòu)的程序設(shè)計(jì) 4.5宏指令宏指令 4.6 32 位匯編語(yǔ)言與位匯編語(yǔ)言與C+語(yǔ)言混合編程語(yǔ)言混合編程 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4
2、月24日4.1 匯編語(yǔ)言與匯編程序l程序員用各種編程語(yǔ)言編寫指令以指揮計(jì)算機(jī)工作。計(jì)算機(jī)程序由一系列指程序員用各種編程語(yǔ)言編寫指令以指揮計(jì)算機(jī)工作。計(jì)算機(jī)程序由一系列指令序列組成。計(jì)算機(jī)通過(guò)對(duì)每條指令的譯碼和執(zhí)行來(lái)完成相應(yīng)的操作。指令令序列組成。計(jì)算機(jī)通過(guò)對(duì)每條指令的譯碼和執(zhí)行來(lái)完成相應(yīng)的操作。指令必須以二進(jìn)制代碼的形式存放在內(nèi)存中,才能夠被計(jì)算機(jī)所識(shí)別和理解,并必須以二進(jìn)制代碼的形式存放在內(nèi)存中,才能夠被計(jì)算機(jī)所識(shí)別和理解,并加以執(zhí)行。由二進(jìn)制代碼表示的指令稱為機(jī)器指令,相應(yīng)的程序稱為機(jī)器語(yǔ)加以執(zhí)行。由二進(jìn)制代碼表示的指令稱為機(jī)器指令,相應(yīng)的程序稱為機(jī)器語(yǔ)言程序。言程序。l任何計(jì)算機(jī)所能直接
3、理解的語(yǔ)言只有其本身的機(jī)器語(yǔ)言任何計(jì)算機(jī)所能直接理解的語(yǔ)言只有其本身的機(jī)器語(yǔ)言(Machine Language)。機(jī)器語(yǔ)言是特定計(jì)算機(jī)的自然語(yǔ)言,由計(jì)算機(jī)的硬件設(shè)計(jì)定義。機(jī)器語(yǔ)言是特定計(jì)算機(jī)的自然語(yǔ)言,由計(jì)算機(jī)的硬件設(shè)計(jì)定義。機(jī)器語(yǔ)言通常由一系列數(shù)字組成機(jī)器語(yǔ)言通常由一系列數(shù)字組成(最終簡(jiǎn)化最終簡(jiǎn)化0和和1),讓計(jì)算機(jī)一次一個(gè)地執(zhí)行,讓計(jì)算機(jī)一次一個(gè)地執(zhí)行最基本的操作。機(jī)器語(yǔ)言程序由最基本的操作。機(jī)器語(yǔ)言程序由0、1二進(jìn)制代碼組成,非常繁瑣、難于編程二進(jìn)制代碼組成,非常繁瑣、難于編程和記憶。隨著計(jì)算機(jī)越來(lái)越普及,機(jī)器語(yǔ)言編程對(duì)大多數(shù)程序員顯然太慢、和記憶。隨著計(jì)算機(jī)越來(lái)越普及,機(jī)器語(yǔ)言編程對(duì)
4、大多數(shù)程序員顯然太慢、太繁瑣。程序員不用計(jì)算機(jī)直接理解的一系列數(shù)字,而是用類似英文縮寫的太繁瑣。程序員不用計(jì)算機(jī)直接理解的一系列數(shù)字,而是用類似英文縮寫的助記符助記符(Memoni)來(lái)表示計(jì)算機(jī)的基本操作,這些助記符構(gòu)成了匯編語(yǔ)言來(lái)表示計(jì)算機(jī)的基本操作,這些助記符構(gòu)成了匯編語(yǔ)言(Assembly Language)。使用匯編語(yǔ)言編寫的程序,機(jī)器不能直接識(shí)別,稱。使用匯編語(yǔ)言編寫的程序,機(jī)器不能直接識(shí)別,稱為匯編器為匯編器/匯編程序匯編程序(assembler)的翻譯程序?qū)R編語(yǔ)言程序轉(zhuǎn)換為機(jī)器語(yǔ)言。的翻譯程序?qū)R編語(yǔ)言程序轉(zhuǎn)換為機(jī)器語(yǔ)言。由此產(chǎn)生了用指令助記符表示的匯編語(yǔ)言指令,對(duì)應(yīng)的程序稱為
5、匯編語(yǔ)言程由此產(chǎn)生了用指令助記符表示的匯編語(yǔ)言指令,對(duì)應(yīng)的程序稱為匯編語(yǔ)言程序。匯編程序把匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言的過(guò)程稱為匯編。序。匯編程序把匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言的過(guò)程稱為匯編。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1 匯編語(yǔ)言與匯編程序l【例【例4-1】【例】【例4-28】均在】均在MASM6.11的環(huán)境中編譯。的環(huán)境中編譯。l【例【例4-1】將】將4位二進(jìn)制數(shù)對(duì)應(yīng)的位二進(jìn)制數(shù)對(duì)應(yīng)的16進(jìn)制數(shù)轉(zhuǎn)換為進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼字符并在屏幕上顯示出來(lái)。當(dāng)數(shù)在碼字符并在屏幕上顯示出來(lái)。當(dāng)數(shù)在0000B-1001B時(shí),對(duì)應(yīng)的時(shí),對(duì)應(yīng)的ASCII碼
6、為碼為0-9(30H-39H);當(dāng)數(shù)在);當(dāng)數(shù)在1010B-1111B時(shí),對(duì)應(yīng)的時(shí),對(duì)應(yīng)的ASCII碼為碼為A-F(41H-46H)。l步驟如下:步驟如下:l(1)在)在Windows系統(tǒng)中的【記事本】(系統(tǒng)中的【記事本】(%SystemRoot%system32notepad.exe)中輸入如下的匯編語(yǔ)言程序并另存為)中輸入如下的匯編語(yǔ)言程序并另存為C:MASM611BINE4-1.ASM:lDATAS SEGMENT ;此處輸入數(shù)據(jù)段代碼此處輸入數(shù)據(jù)段代碼l x DB 10lDATAS ENDSlCODES SEGMENT;此處輸入代碼段代碼此處輸入代碼段代碼l ASSUME CS:COD
7、ES,DS:DATASlSTART:l MOV AX,DATASl MOV DS,AXl MOV AL,xl AND AL,0FHl CMP AL,0AHl JB NUM; JB:jump when belowl ADD AL,07HlNUM: ADD AL,30Hl MOV DL,AL ;DOS2號(hào)功能調(diào)用,顯示號(hào)功能調(diào)用,顯示DL中中ASCII碼對(duì)應(yīng)的字符碼對(duì)應(yīng)的字符l MOV AH,2l INT 21Hl MOV AH,4CH ;帶返回碼結(jié)束帶返回碼結(jié)束l INT 21HlCODES ENDSl END START微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013
8、年4月24日4.1 匯編語(yǔ)言與匯編程序l(2)單擊)單擊【開(kāi)始開(kāi)始】【】【程序程序】【】【運(yùn)行運(yùn)行】,在,在【打開(kāi)打開(kāi)】框框中輸入中輸入cmd,再單擊,再單擊【確定確定】。l在彈出的在彈出的DOS命令提示符窗口中輸入如下帶下劃線的命令:命令提示符窗口中輸入如下帶下劃線的命令:lC:Documents and SettingsCD C:masm611binl此命令將當(dāng)前目錄切換到此命令將當(dāng)前目錄切換到C:MASM611BIN。lC:MASM611BINMASM E4-1.asml上述命令將匯編語(yǔ)言源程序上述命令將匯編語(yǔ)言源程序E4-1.asm翻譯成二進(jìn)制代碼翻譯成二進(jìn)制代碼的機(jī)器語(yǔ)言程序(即目標(biāo)
9、代碼),在的機(jī)器語(yǔ)言程序(即目標(biāo)代碼),在C:masm611bin目目錄里會(huì)看到新生成的目標(biāo)代碼文件錄里會(huì)看到新生成的目標(biāo)代碼文件E4-1.obj。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1 匯編語(yǔ)言與匯編程序l(3)C:MASM611BINLink E4-1.obj ( 不用附加名不用附加名OBJ也可),如圖也可),如圖4-1所示。所示。lMicrosoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992lCopyright (C) Microsoft Corp 198
10、4-1992. All rights reserved.lRun File e4-1.exe: 是否改動(dòng)輸出是否改動(dòng)輸出EXE文件名,如不改就文件名,如不改就ENTERlList File nul.map: 是否需要列表文件(是否需要列表文件(MAP),不需要?jiǎng)t),不需要?jiǎng)tENTERlLibraries .lib: 是否需要庫(kù)文件,要就鍵入文件名,不要?jiǎng)t是否需要庫(kù)文件,要就鍵入文件名,不要?jiǎng)tENTERlDefinitions File nul.def:lLINK : warning L4021: no stack segment由于由于COM文件不使用堆棧段,所文件不使用堆棧段,所以錯(cuò)誤信息,
11、以錯(cuò)誤信息,no stack segment并不影響程序正常執(zhí)行至此已經(jīng)生成并不影響程序正常執(zhí)行至此已經(jīng)生成EXE文件。文件。l連接程序連接程序Link.exe將目標(biāo)文件將目標(biāo)文件E4-1.obj與其他目標(biāo)文件及系統(tǒng)提供的一些庫(kù)與其他目標(biāo)文件及系統(tǒng)提供的一些庫(kù)文件連接在一起,生成以文件連接在一起,生成以EXE或或COM為擴(kuò)展名的可執(zhí)行文件。為擴(kuò)展名的可執(zhí)行文件。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1 匯編語(yǔ)言與匯編程序(4)運(yùn)行如圖所示,鍵入E4-1.exe,可看到輸出的結(jié)果A,A是10的十六進(jìn)制表示。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù)
12、 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1 匯編語(yǔ)言與匯編程序l(5)調(diào)試和查看匯編代碼的機(jī)器碼)調(diào)試和查看匯編代碼的機(jī)器碼l在在CodeView(安裝安裝MASM6.11后,是默認(rèn)安裝路徑的后,是默認(rèn)安裝路徑的C:MASM611BINCV.EXE文件文件)中打開(kāi)中打開(kāi)E4-1.exe文件,即可看到如下圖圖文件,即可看到如下圖圖4-2所示的窗口。所示的窗口。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1 匯編語(yǔ)言與匯編程序l畫(huà)面的左上窗口是調(diào)試器的主窗口,其顯示被調(diào)畫(huà)面的左上窗口是調(diào)試器的主窗口,其顯示被調(diào)試的源程序或執(zhí)行代碼,左下
13、窗口是命令窗口,試的源程序或執(zhí)行代碼,左下窗口是命令窗口,用戶可輸入各種用戶可輸入各種DEBUG命令,右窗口是顯示寄命令,右窗口是顯示寄存器窗口,它可顯示存器窗口,它可顯示16位寄存器的內(nèi)容。在主窗位寄存器的內(nèi)容。在主窗口口3中,分為中,分為3列顯示,第列顯示,第1列顯示的是代碼所在列顯示的是代碼所在內(nèi)存單元的段地址和段內(nèi)偏移地址,請(qǐng)注意右側(cè)內(nèi)存單元的段地址和段內(nèi)偏移地址,請(qǐng)注意右側(cè)寄存器寄存器reg窗口的窗口的CS寄存器和寄存器和IP寄存器的值,它寄存器的值,它們和當(dāng)前要執(zhí)行的指令的段地址和偏移地址是一們和當(dāng)前要執(zhí)行的指令的段地址和偏移地址是一致的。第致的。第2列顯示的是第列顯示的是第3列匯
14、編指令的相應(yīng)的列匯編指令的相應(yīng)的16進(jìn)制表示的機(jī)器指令。按快捷鍵進(jìn)制表示的機(jī)器指令。按快捷鍵F10可以進(jìn)行單可以進(jìn)行單步運(yùn)行代碼,以逐語(yǔ)句觀察運(yùn)行結(jié)果。步運(yùn)行代碼,以逐語(yǔ)句觀察運(yùn)行結(jié)果。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.2 匯編與連接匯編與連接l1匯編程序匯編程序l匯編是把匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言描述的目標(biāo)程序的過(guò)程。匯編是把匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言描述的目標(biāo)程序的過(guò)程。l匯編程序是完成匯編任務(wù)的程序。匯編程序是完成匯編任務(wù)的程序。l2連接程序連接程序l連接程序的主要功能是實(shí)現(xiàn)多個(gè)目標(biāo)文件及庫(kù)文件的連接,并完成浮連接程序的主要功
15、能是實(shí)現(xiàn)多個(gè)目標(biāo)文件及庫(kù)文件的連接,并完成浮動(dòng)地址的重定位。動(dòng)地址的重定位。l從匯編語(yǔ)言源程序到可執(zhí)行程序的生成過(guò)程如圖所示。從匯編語(yǔ)言源程序到可執(zhí)行程序的生成過(guò)程如圖所示。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.3 匯編語(yǔ)言與高級(jí)語(yǔ)言匯編語(yǔ)言與高級(jí)語(yǔ)言l匯編語(yǔ)言程序的基本單位仍然是機(jī)器指令,只是采用助記符表示,便匯編語(yǔ)言程序的基本單位仍然是機(jī)器指令,只是采用助記符表示,便于人們記憶。匯編語(yǔ)言是一種依賴于計(jì)算機(jī)微處理器的語(yǔ)言,每種機(jī)于人們記憶。匯編語(yǔ)言是一種依賴于計(jì)算機(jī)微處理器的語(yǔ)言,每種機(jī)器都有它專用的匯編語(yǔ)言器都有它專用的匯編語(yǔ)言(如如
16、8086CPU與與8031單片機(jī)的匯編語(yǔ)言即不單片機(jī)的匯編語(yǔ)言即不相同相同),匯編語(yǔ)言一般不具有通用性和可移植性。由于進(jìn)行匯編語(yǔ)言,匯編語(yǔ)言一般不具有通用性和可移植性。由于進(jìn)行匯編語(yǔ)言程序設(shè)計(jì)必須熟悉機(jī)器的硬件資源和軟件資源,因此具有較大的難度程序設(shè)計(jì)必須熟悉機(jī)器的硬件資源和軟件資源,因此具有較大的難度和復(fù)雜性。為了加速編程過(guò)程,人們開(kāi)發(fā)了高級(jí)語(yǔ)言和復(fù)雜性。為了加速編程過(guò)程,人們開(kāi)發(fā)了高級(jí)語(yǔ)言(high-level language),用一條語(yǔ)句完成大量任務(wù)。稱為編譯器,用一條語(yǔ)句完成大量任務(wù)。稱為編譯器(compiler)的翻的翻譯程序?qū)⒏呒?jí)語(yǔ)言程序變?yōu)橄鄳?yīng)的機(jī)器語(yǔ)言。高級(jí)語(yǔ)言使程序員能夠譯
17、程序?qū)⒏呒?jí)語(yǔ)言程序變?yōu)橄鄳?yīng)的機(jī)器語(yǔ)言。高級(jí)語(yǔ)言使程序員能夠編寫更像英語(yǔ)的指令,可以包含常用的數(shù)學(xué)符號(hào)。從程序員角度看,編寫更像英語(yǔ)的指令,可以包含常用的數(shù)學(xué)符號(hào)。從程序員角度看,高級(jí)語(yǔ)言比機(jī)器語(yǔ)言和匯編語(yǔ)言都要強(qiáng)得多。高級(jí)語(yǔ)言比機(jī)器語(yǔ)言和匯編語(yǔ)言都要強(qiáng)得多。C、C+、C#、VB和和Java等等是目前最強(qiáng)大最廣泛使用的高級(jí)語(yǔ)言。將高級(jí)語(yǔ)言程序編等等是目前最強(qiáng)大最廣泛使用的高級(jí)語(yǔ)言。將高級(jí)語(yǔ)言程序編譯為相應(yīng)的機(jī)器語(yǔ)言的過(guò)程可能需要大量時(shí)間。解釋器譯為相應(yīng)的機(jī)器語(yǔ)言的過(guò)程可能需要大量時(shí)間。解釋器(interpreter)程序可以直接執(zhí)行高級(jí)語(yǔ)言程序,而不必先將這些程序編譯成相應(yīng)的程序可以直接執(zhí)行高級(jí)
18、語(yǔ)言程序,而不必先將這些程序編譯成相應(yīng)的機(jī)器語(yǔ)言。盡管編譯程序的執(zhí)行速度比解釋程序更快,但解釋器在程機(jī)器語(yǔ)言。盡管編譯程序的執(zhí)行速度比解釋程序更快,但解釋器在程序開(kāi)發(fā)環(huán)境中更常用,因?yàn)樵黾有绿匦院图m正錯(cuò)誤時(shí)經(jīng)常需要重新編序開(kāi)發(fā)環(huán)境中更常用,因?yàn)樵黾有绿匦院图m正錯(cuò)誤時(shí)經(jīng)常需要重新編譯程序。一旦程序開(kāi)發(fā)完成,編譯版本的運(yùn)行最有效。譯程序。一旦程序開(kāi)發(fā)完成,編譯版本的運(yùn)行最有效。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.3 匯編語(yǔ)言與高級(jí)語(yǔ)言匯編語(yǔ)言與高級(jí)語(yǔ)言l高級(jí)語(yǔ)言高級(jí)語(yǔ)言(Computer-independent Language),如,如
19、BASIC,FORTRAN,C語(yǔ)言語(yǔ)言等是面向過(guò)程的語(yǔ)言,不依賴于機(jī)器,因等是面向過(guò)程的語(yǔ)言,不依賴于機(jī)器,因而具有很好的通用性和可移植性,并且具而具有很好的通用性和可移植性,并且具有很高的程序設(shè)計(jì)效率,便于開(kāi)發(fā)復(fù)雜龐有很高的程序設(shè)計(jì)效率,便于開(kāi)發(fā)復(fù)雜龐大的軟件系統(tǒng)。大的軟件系統(tǒng)。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.3 匯編語(yǔ)言與高級(jí)語(yǔ)言匯編語(yǔ)言與高級(jí)語(yǔ)言l既然高級(jí)語(yǔ)言有很多優(yōu)點(diǎn),為什么還要學(xué)習(xí)匯編語(yǔ)言呢?理既然高級(jí)語(yǔ)言有很多優(yōu)點(diǎn),為什么還要學(xué)習(xí)匯編語(yǔ)言呢?理由如下:由如下:l 匯編語(yǔ)言仍然是各種系統(tǒng)軟件(如操作系統(tǒng))設(shè)計(jì)的基匯編語(yǔ)言仍
20、然是各種系統(tǒng)軟件(如操作系統(tǒng))設(shè)計(jì)的基本語(yǔ)言。利用匯編語(yǔ)言可以設(shè)計(jì)出效率極高的核心底層程序,本語(yǔ)言。利用匯編語(yǔ)言可以設(shè)計(jì)出效率極高的核心底層程序,如設(shè)備驅(qū)動(dòng)程序。迄今在許多高級(jí)應(yīng)用編程中,如設(shè)備驅(qū)動(dòng)程序。迄今在許多高級(jí)應(yīng)用編程中,32位匯編語(yǔ)位匯編語(yǔ)言編程仍然占有較大的市場(chǎng)。言編程仍然占有較大的市場(chǎng)。l 用匯編語(yǔ)言編寫的程序一般比用高級(jí)語(yǔ)言編寫的程序執(zhí)用匯編語(yǔ)言編寫的程序一般比用高級(jí)語(yǔ)言編寫的程序執(zhí)行速度快,且占內(nèi)存較少。行速度快,且占內(nèi)存較少。l 匯編語(yǔ)言程序能夠直接有效地利用機(jī)器硬件資源,在一匯編語(yǔ)言程序能夠直接有效地利用機(jī)器硬件資源,在一些實(shí)時(shí)控制系統(tǒng)中更是不可代替。些實(shí)時(shí)控制系統(tǒng)中更是
21、不可代替。l 學(xué)習(xí)匯編語(yǔ)言對(duì)于理解和掌握計(jì)算機(jī)硬件組成及工作原學(xué)習(xí)匯編語(yǔ)言對(duì)于理解和掌握計(jì)算機(jī)硬件組成及工作原理十分重要,也是進(jìn)行計(jì)算機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基礎(chǔ)。理十分重要,也是進(jìn)行計(jì)算機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基礎(chǔ)。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.4 匯編語(yǔ)言源程序的結(jié)構(gòu)匯編語(yǔ)言源程序的結(jié)構(gòu)(Program Structure)l一個(gè)匯編語(yǔ)言源程序由若干個(gè)代碼段、數(shù)一個(gè)匯編語(yǔ)言源程序由若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段組成,先看下面的據(jù)段、附加段或堆棧段組成,先看下面的例子。例子。l【例【例4-2】將一個(gè)】將一個(gè)8位二進(jìn)制數(shù)分成高位二進(jìn)制數(shù)分成
22、高4位和位和低低4位分別轉(zhuǎn)換為兩個(gè)位分別轉(zhuǎn)換為兩個(gè)ASCII字符。設(shè)待轉(zhuǎn)字符。設(shè)待轉(zhuǎn)換的數(shù)據(jù)及轉(zhuǎn)換好的換的數(shù)據(jù)及轉(zhuǎn)換好的ASCII字符均存放在數(shù)字符均存放在數(shù)據(jù)段中。完整的匯編語(yǔ)言源程序如下:據(jù)段中。完整的匯編語(yǔ)言源程序如下:微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)1 NAME BIN2ASCIIl2 l3 DATA SEGMENT ; 數(shù)據(jù)段定義開(kāi)始數(shù)據(jù)段定義開(kāi)始l4 BIN DB 10101011Bl5 ASC DB 2 DUP(?)l6 DATA ENDS ; 數(shù)據(jù)段定義結(jié)束數(shù)據(jù)段定義結(jié)束l7l8 STACK SEGMENT ; 堆棧段定義
23、開(kāi)始堆棧段定義開(kāi)始l9 DB 256 DUP(S)l10 TOP EQU $-STACKl11 STACK ENDS ; 堆棧段定義結(jié)束堆棧段定義結(jié)束l12l13 EXTRA SEGMENT ; 定義附加段定義附加段l14 data1 DW ? l15 data2 DW ?l16 data3 DW ?l17 EXTRA ENDS ; 附加段定義結(jié)束附加段定義結(jié)束l18微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)19 CODE SEGMENT ; 代碼段定義開(kāi)始代碼段定義開(kāi)始l20 ASSUME CS:CODE, DS:DATA, SS:STACKl2
24、1 ;.l22 START: MOV AX, DATA ; 主程序開(kāi)始主程序開(kāi)始l23 MOV DS, AXl24 MOV AX, STACKl25 MOV SS, AXl26 MOV SP, TOPl27 MOV BX, OFFSET ASCl28 MOV AL, BINl29 MOV AH, ALl30 MOV CL, 4l31 SHR AL, CLl32 CALL NEAR PTR CONVERTl33 MOV BX,ALl34 l35 INC BXl36 MOV AL, AH微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)37 CALL NEAR
25、 PTR CONVERTl38 MOV BX,ALl39 INC BXl40 MOV BX, $;加字符串結(jié)束標(biāo)記加字符串結(jié)束標(biāo)記l41 l42LEA DX,ASCl43MOV AH,9l44INT 21Hl45 l46MOV AH,4CHl47INT 21Hl48HLT ; 主程序結(jié)束主程序結(jié)束 l49;.l50CONVERT PROC ; 過(guò)程過(guò)程(子程序子程序)定義開(kāi)始定義開(kāi)始l51 AND AL,0FHl52 CMP AL,10l53 JB NUMl54 ADD AL,7l55NUM: ADD AL, 0l56 RETl57CONVERT ENDP ; 過(guò)程過(guò)程(子程序子程序)定義結(jié)束
26、定義結(jié)束l58;.l59CODE ENDS ; 代碼段定義結(jié)束代碼段定義結(jié)束l60l61 END START ; 程序結(jié)束程序結(jié)束微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日 從例從例4-2中可以看出,一個(gè)匯編語(yǔ)言源程序由若干個(gè)代碼段、中可以看出,一個(gè)匯編語(yǔ)言源程序由若干個(gè)代碼段、數(shù)據(jù)段、附加段和堆棧段組成,即程序由段結(jié)構(gòu)組成。它們數(shù)據(jù)段、附加段和堆棧段組成,即程序由段結(jié)構(gòu)組成。它們由段定義開(kāi)始語(yǔ)句由段定義開(kāi)始語(yǔ)句“SEGMENT”和段定義結(jié)束語(yǔ)句和段定義結(jié)束語(yǔ)句“ENDS”來(lái)定義一個(gè)段。每個(gè)段都有一個(gè)段名,段名可自來(lái)定義一個(gè)段。每個(gè)段都有一個(gè)段名,段
27、名可自行命名,如數(shù)據(jù)段的段名為行命名,如數(shù)據(jù)段的段名為“DATA”,堆棧段的段名為堆棧段的段名為“STACK”,代碼段的段名為代碼段的段名為“CODE”。 數(shù)據(jù)段和附加段用于存放變量、數(shù)據(jù)和結(jié)果,堆棧段用于數(shù)據(jù)段和附加段用于存放變量、數(shù)據(jù)和結(jié)果,堆棧段用于執(zhí)行壓棧和出棧操作,以及子程序調(diào)用和參數(shù)傳遞,代碼段執(zhí)行壓棧和出棧操作,以及子程序調(diào)用和參數(shù)傳遞,代碼段則是所編制的執(zhí)行程序或常數(shù)表格。各個(gè)段都由一系列語(yǔ)句則是所編制的執(zhí)行程序或常數(shù)表格。各個(gè)段都由一系列語(yǔ)句組成。語(yǔ)句包括指令語(yǔ)句和偽指令語(yǔ)句。指令語(yǔ)句組成。語(yǔ)句包括指令語(yǔ)句和偽指令語(yǔ)句。指令語(yǔ)句(Instruction Statements)
28、產(chǎn)生對(duì)應(yīng)的機(jī)器代碼,指定產(chǎn)生對(duì)應(yīng)的機(jī)器代碼,指定CPU做什么操作,而偽指令語(yǔ)句做什么操作,而偽指令語(yǔ)句(Directive Statements)并不產(chǎn)并不產(chǎn)生機(jī)器代碼,僅僅起控制匯編過(guò)程的作用,它指定匯編器生機(jī)器代碼,僅僅起控制匯編過(guò)程的作用,它指定匯編器(Assembler)作何種操作。)作何種操作。 匯編器是專門把匯編語(yǔ)言源程序匯編成機(jī)器語(yǔ)言的工具軟匯編器是專門把匯編語(yǔ)言源程序匯編成機(jī)器語(yǔ)言的工具軟件。它通過(guò)偽指令來(lái)了解諸如件。它通過(guò)偽指令來(lái)了解諸如“變量名列表變量名列表”、“變量所在變量所在位置位置”、“過(guò)程名過(guò)程名”等信息。在例等信息。在例4-2中,中,NAME,SEGMENT/EN
29、DS,DB,EQU,ORG,ASSUME,PTR,PROC/ENDP,END等都是偽指令,它們是匯編語(yǔ)言源程序的等都是偽指令,它們是匯編語(yǔ)言源程序的重要組成部分。重要組成部分。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l匯編語(yǔ)言程序的每行語(yǔ)句由匯編語(yǔ)言程序的每行語(yǔ)句由14個(gè)部分組成。指令語(yǔ)句和個(gè)部分組成。指令語(yǔ)句和偽指令語(yǔ)句的格式稍有區(qū)別,指令語(yǔ)句的標(biāo)號(hào)后有冒號(hào)偽指令語(yǔ)句的格式稍有區(qū)別,指令語(yǔ)句的標(biāo)號(hào)后有冒號(hào)“:”,偽指令語(yǔ)句的標(biāo)號(hào)后沒(méi)有冒號(hào)。,偽指令語(yǔ)句的標(biāo)號(hào)后沒(méi)
30、有冒號(hào)。l指令語(yǔ)句的格式為指令語(yǔ)句的格式為lLABEL: OPERATION OPERAND ;COMMENTl標(biāo)號(hào)域標(biāo)號(hào)域 指令助記符域指令助記符域 操作數(shù)域操作數(shù)域 注釋域注釋域l偽指令語(yǔ)句的格式為偽指令語(yǔ)句的格式為lLABEL OPERATION OPERAND ;COMMENTl標(biāo)號(hào)域標(biāo)號(hào)域 偽指令助記符域偽指令助記符域 操作數(shù)域操作數(shù)域 注釋域注釋域微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)語(yǔ)句格式中用方括號(hào)括起來(lái)的部分,是可選項(xiàng),可以有也可以沒(méi)有。每語(yǔ)句格式中用方括號(hào)括起來(lái)的部分,是可選項(xiàng),可以有也可以沒(méi)有。每部分之間用空格部分之間用空
31、格(至少一個(gè)至少一個(gè))分開(kāi),一行最多可有分開(kāi),一行最多可有132個(gè)字符。個(gè)字符。lLABEL:標(biāo)號(hào)域,表示段名、變量名、過(guò)程名或指令符號(hào)地址等。:標(biāo)號(hào)域,表示段名、變量名、過(guò)程名或指令符號(hào)地址等。lOPERATION:助記符域,為指令或偽指令的助記符。:助記符域,為指令或偽指令的助記符。lOPERAND:操作數(shù)域,表示操作的對(duì)象,由一個(gè)或多個(gè)表達(dá)式組成,:操作數(shù)域,表示操作的對(duì)象,由一個(gè)或多個(gè)表達(dá)式組成,表達(dá)式與表達(dá)式之間必須用逗號(hào)表達(dá)式與表達(dá)式之間必須用逗號(hào)“,”分開(kāi)。分開(kāi)。lCOMMENT:注釋域,用來(lái)說(shuō)明語(yǔ)句的功能,以:注釋域,用來(lái)說(shuō)明語(yǔ)句的功能,以“;”開(kāi)始。匯編程序開(kāi)始。匯編程序?qū)?duì)
32、“;”以后的部分不予匯編。以后的部分不予匯編。l指令助記符前面還可以有指令助記符前面還可以有前綴前綴。匯編程序語(yǔ)句中的四個(gè)域,均可以用。匯編程序語(yǔ)句中的四個(gè)域,均可以用大寫、小寫或大小寫混合編寫。大寫、小寫或大小寫混合編寫。l標(biāo)號(hào)標(biāo)號(hào)(Label)是一個(gè)自行設(shè)計(jì)的標(biāo)識(shí)符或名稱,最多可由是一個(gè)自行設(shè)計(jì)的標(biāo)識(shí)符或名稱,最多可由31個(gè)字母、數(shù)字個(gè)字母、數(shù)字和特別字符和特別字符(?、?、_、$)等組成。但不能用數(shù)字開(kāi)頭等組成。但不能用數(shù)字開(kāi)頭,中間不能有空格,中間不能有空格,也不能為匯編語(yǔ)言的保留字。也不能為匯編語(yǔ)言的保留字。l注:保留字指有專門用途的字符或字符串,如注:保留字指有專門用途的字符或字符
33、串,如CPU的寄存器名、指令助的寄存器名、指令助記符、偽指令助記符等。記符、偽指令助記符等。l標(biāo)號(hào)一般表示變量名、段名、過(guò)程名或指令符號(hào)地址。變量名、段名和標(biāo)號(hào)一般表示變量名、段名、過(guò)程名或指令符號(hào)地址。變量名、段名和過(guò)程名由專門的偽指令語(yǔ)句定義,而指令符號(hào)地址則根據(jù)需要在標(biāo)號(hào)域過(guò)程名由專門的偽指令語(yǔ)句定義,而指令符號(hào)地址則根據(jù)需要在標(biāo)號(hào)域中寫上,后面跟一個(gè)中寫上,后面跟一個(gè)“:”。l在同一個(gè)匯編單位(以在同一個(gè)匯編單位(以END結(jié)束的程序模塊)中,標(biāo)號(hào)域中的標(biāo)號(hào)不能結(jié)束的程序模塊)中,標(biāo)號(hào)域中的標(biāo)號(hào)不能相同。相同。l操作數(shù)操作數(shù)(Operand)可以是常數(shù)、常量、變量、標(biāo)號(hào)、寄存器名或表達(dá)式
34、。可以是常數(shù)、常量、變量、標(biāo)號(hào)、寄存器名或表達(dá)式。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)1. 常數(shù)、常量常數(shù)、常量l編程時(shí)已經(jīng)確定其值,程序運(yùn)行期間不會(huì)改變其值的數(shù)據(jù)對(duì)象稱為常數(shù)。編程時(shí)已經(jīng)確定其值,程序運(yùn)行期間不會(huì)改變其值的數(shù)據(jù)對(duì)象稱為常數(shù)。l8086/8088CPU允許定義四種形式的常數(shù):允許定義四種形式的常數(shù): 整數(shù)、字符串、整數(shù)、字符串、“組合組合BCD碼數(shù)碼數(shù)”和實(shí)數(shù)和實(shí)數(shù)(浮點(diǎn)數(shù)浮點(diǎn)數(shù)),但只能處理整數(shù)、字符串、,但只能處理整數(shù)、字符串、“組合組合BCD碼數(shù)碼數(shù)”,不能處理實(shí)數(shù)不能處理實(shí)數(shù)(浮點(diǎn)數(shù)浮點(diǎn)數(shù))。l常數(shù)表達(dá)式的名字稱為常量
35、。常數(shù)表達(dá)式的名字稱為常量。 (程序員給出的一個(gè)名或助記名作為一(程序員給出的一個(gè)名或助記名作為一個(gè)確定值的標(biāo)識(shí),個(gè)確定值的標(biāo)識(shí), 其值在程序執(zhí)行過(guò)程中保持不變。)常量可用偽指其值在程序執(zhí)行過(guò)程中保持不變。)常量可用偽指令說(shuō)明符令說(shuō)明符“EQU”或或“=”定義。定義。l例如,例如,A EQU 7或或 A = 7都可將常量都可將常量A的值定義為常數(shù)的值定義為常數(shù)7。l注意:偽指令說(shuō)明符注意:偽指令說(shuō)明符EQU左邊的符號(hào)名不允許重復(fù)定義,而左邊的符號(hào)名不允許重復(fù)定義,而“=”左邊的左邊的符號(hào)名可以重復(fù)定義。即:符號(hào)名可以重復(fù)定義。即:A EQU 7可以:A=7A EQU 8 (不允許)可以:A=8
36、微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l匯編語(yǔ)言語(yǔ)句中出現(xiàn)的常數(shù)一般有匯編語(yǔ)言語(yǔ)句中出現(xiàn)的常數(shù)一般有5種:種:l(1) 二進(jìn)制數(shù)(二進(jìn)制數(shù)(binary) 后跟字母后跟字母B,如,如10101011B。l(2) 八進(jìn)制數(shù)(八進(jìn)制數(shù)(octal) 后跟字母后跟字母Q,如,如367Q。l(3) 十進(jìn)制數(shù)(十進(jìn)制數(shù)(decimal) 后跟字母后跟字母D或不跟字母,如或不跟字母,如9D或或9。l(4) 十六進(jìn)制數(shù)(十六進(jìn)制數(shù)(hexadecimal) 后跟字母后跟字母H
37、,如,如0FH,3AH。注意,。注意,當(dāng)數(shù)字的第一個(gè)字符是當(dāng)數(shù)字的第一個(gè)字符是AF時(shí),在字符前應(yīng)添加一個(gè)數(shù)字時(shí),在字符前應(yīng)添加一個(gè)數(shù)字0,以示和,以示和變量或保留字的區(qū)別。如變量或保留字的區(qū)別。如0AH表示十六進(jìn)制數(shù),而表示十六進(jìn)制數(shù),而AH則表示則表示8086CPU中的中的8位寄存器。位寄存器。l(5) 字符和字符串字符和字符串 字符或字符串的值是取其對(duì)應(yīng)的字符或字符串的值是取其對(duì)應(yīng)的ASCII碼碼,并用一對(duì)并用一對(duì)單引號(hào)單引號(hào) 括起來(lái)。如字符括起來(lái)。如字符0,其對(duì)應(yīng)的其對(duì)應(yīng)的ASCII碼為碼為30H。字符。字符串串MASM以以ASCII碼碼4DH 、41H、53H和和4DH存放。存放。微機(jī)
38、原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)2. 變量、標(biāo)號(hào)和寄存器名變量、標(biāo)號(hào)和寄存器名l例如,指令例如,指令MOV AL, BIN中,中,AL為寄存器名,表示目的操為寄存器名,表示目的操作數(shù),作數(shù),BIN為變量名,表示源操作數(shù)。為變量名,表示源操作數(shù)。l標(biāo)號(hào)就是指令地址的名字,也稱為指令的符號(hào)地址。標(biāo)號(hào)定標(biāo)號(hào)就是指令地址的名字,也稱為指令的符號(hào)地址。標(biāo)號(hào)定義在指令的前面義在指令的前面(通常是左邊通常是左邊),用冒號(hào)作為分隔符。標(biāo)號(hào)只,用冒號(hào)作為分隔符。標(biāo)號(hào)只能定義在代碼段能定義在代碼段(CS)中,它代表其后第一條指令的第一個(gè)字中,它代表其后第一條指令
39、的第一個(gè)字節(jié)的存儲(chǔ)單元地址,用于說(shuō)明指令在存儲(chǔ)器中的存儲(chǔ)位置。節(jié)的存儲(chǔ)單元地址,用于說(shuō)明指令在存儲(chǔ)器中的存儲(chǔ)位置。例如例如, 在例在例4-2的指令序列中,的指令序列中,lSTART: MOV AX, DATA ; 主程序開(kāi)始主程序開(kāi)始l這里,這里,START就是標(biāo)號(hào)就是標(biāo)號(hào).l標(biāo)號(hào)有如下的屬性:標(biāo)號(hào)有如下的屬性:l(1) 段基值屬性:段基值屬性: 指標(biāo)號(hào)后面第一條指令所在的代碼段的段指標(biāo)號(hào)后面第一條指令所在的代碼段的段基值;基值;l(2) 偏移地址屬性:偏移地址屬性: 指標(biāo)號(hào)后面第一條指令首字節(jié)的段內(nèi)偏指標(biāo)號(hào)后面第一條指令首字節(jié)的段內(nèi)偏移地址;移地址;l(3) 類型屬性:類型屬性: 也稱距離屬
40、性,是指標(biāo)號(hào)與引用該標(biāo)號(hào)的指也稱距離屬性,是指標(biāo)號(hào)與引用該標(biāo)號(hào)的指令之間允許距離的遠(yuǎn)、近。令之間允許距離的遠(yuǎn)、近。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l3. 表達(dá)式表達(dá)式l由運(yùn)算符連接起來(lái)的式子叫表達(dá)式,匯編由運(yùn)算符連接起來(lái)的式子叫表達(dá)式,匯編程序在對(duì)其匯編時(shí),按一定的規(guī)則對(duì)表達(dá)程序在對(duì)其匯編時(shí),按一定的規(guī)則對(duì)表達(dá)式進(jìn)行運(yùn)算后得到一個(gè)數(shù)值或一個(gè)地址。式進(jìn)行運(yùn)算后得到一個(gè)數(shù)值或一個(gè)地址。l表達(dá)式可分算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)表達(dá)式可分算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系
41、運(yùn)算表達(dá)式、分析運(yùn)算表達(dá)式和合成運(yùn)系運(yùn)算表達(dá)式、分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式。算表達(dá)式。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l(1) 算術(shù)表達(dá)式算術(shù)表達(dá)式l算術(shù)運(yùn)算符有算術(shù)運(yùn)算符有l(wèi)加(加(+)、減()、減(-)、乘()、乘(*)、除()、除(/)、求余)、求余(MOD)l算術(shù)運(yùn)算表達(dá)式的最后結(jié)果仍為一個(gè)數(shù)。例如算術(shù)運(yùn)算表達(dá)式的最后結(jié)果仍為一個(gè)數(shù)。例如l5*8+20, 127/100,5 MOD 3l等算術(shù)表達(dá)式,其結(jié)果分別為等算術(shù)表達(dá)式,其結(jié)果分別為60,
42、1和和2。 微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l(2) 邏輯表達(dá)式邏輯表達(dá)式l邏輯運(yùn)算符有邏輯運(yùn)算符有AND(邏輯與邏輯與)、OR(邏輯或)、(邏輯或)、XOR(邏(邏輯異或)和輯異或)和NOT(邏輯非)。(邏輯非)。l邏輯表達(dá)式的結(jié)果視情況不同而可能為邏輯表達(dá)式的結(jié)果視情況不同而可能為8位或位或16位二進(jìn)制位二進(jìn)制數(shù)。數(shù)。l邏輯運(yùn)算符與邏輯運(yùn)算指令的區(qū)別在于,前者在匯編時(shí)完邏輯運(yùn)算符與邏輯運(yùn)算指令的區(qū)別在于,前者在匯編時(shí)完成邏輯運(yùn)算,而后者在指令執(zhí)行時(shí)完成
43、邏輯運(yùn)算。例如成邏輯運(yùn)算,而后者在指令執(zhí)行時(shí)完成邏輯運(yùn)算。例如lAND AL, 10101011B AND 0FHl10101011B AND 0FH 為邏輯表達(dá)式,其結(jié)果在匯編時(shí)即為邏輯表達(dá)式,其結(jié)果在匯編時(shí)即已確定,為已確定,為00001011B,故上述指令等價(jià)于故上述指令等價(jià)于lAND AL, 00001011B微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l(3) 關(guān)系表達(dá)式關(guān)系表達(dá)式l關(guān)系運(yùn)算符有關(guān)系運(yùn)算符有EQ(Equal,等于)、,等于)、NE(Not E
44、qual,不等于)、,不等于)、LT(Less Than,小于)、,小于)、LE(Less Than or Equal,小于或等,小于或等于)、于)、GT(Greater Than,大于,大于)和和GE(Greater Than or Equal,大于或等于)共六種。大于或等于)共六種。l關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須都是數(shù)字或同一段內(nèi)的兩個(gè)存儲(chǔ)單元的關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須都是數(shù)字或同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址。計(jì)算的結(jié)果為邏輯值,結(jié)果為真,表示為地址。計(jì)算的結(jié)果為邏輯值,結(jié)果為真,表示為0FFFFH;結(jié)果為假,;結(jié)果為假,表示為表示為0000H。例如指令。例如指令lMOV BX, 5 GT
45、3l其中其中, 5 GT 3為關(guān)系表達(dá)式為關(guān)系表達(dá)式,該關(guān)系成立該關(guān)系成立,結(jié)果為結(jié)果為0FFFFH。故指令等價(jià)。故指令等價(jià)于于lMOV BX, 0FFFFH微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.1.5 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式(Statement Formats)l (4) 分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式l分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式的操作對(duì)象都為存儲(chǔ)器操作數(shù)。存分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式的操作對(duì)象都為存儲(chǔ)器操作數(shù)。存儲(chǔ)器操作數(shù)表示變量、符號(hào)地址、存儲(chǔ)單元等。分析運(yùn)算表達(dá)式把存儲(chǔ)器操作數(shù)表示變
46、量、符號(hào)地址、存儲(chǔ)單元等。分析運(yùn)算表達(dá)式把存儲(chǔ)器操作數(shù)分解為幾個(gè)部分,如分解出段值、偏移量、類型等;而合儲(chǔ)器操作數(shù)分解為幾個(gè)部分,如分解出段值、偏移量、類型等;而合成運(yùn)算表達(dá)式則把這些組成部分綜合為存儲(chǔ)器操作數(shù)。成運(yùn)算表達(dá)式則把這些組成部分綜合為存儲(chǔ)器操作數(shù)。l例如,例例如,例4-2中的指令中的指令lMOV BX, OFFSET ASClOFFSET ASC即為分析運(yùn)算表達(dá)式,它的作用為取存儲(chǔ)器操作數(shù)即為分析運(yùn)算表達(dá)式,它的作用為取存儲(chǔ)器操作數(shù)(變量)(變量)ASC的地址偏移量,由于在例的地址偏移量,由于在例4-2中,中,ASC的偏移地址為的偏移地址為0001H,即,即OFFSET ASC=0
47、001H。故該指令等價(jià)于。故該指令等價(jià)于lMOV BX, 0001H微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2 偽指令及其應(yīng)用l偽指令語(yǔ)句只是用來(lái)指示、引導(dǎo)匯編程序在匯編時(shí)做一些偽指令語(yǔ)句只是用來(lái)指示、引導(dǎo)匯編程序在匯編時(shí)做一些操作,它不產(chǎn)生機(jī)器代碼,本身也不占用存儲(chǔ)單元。操作,它不產(chǎn)生機(jī)器代碼,本身也不占用存儲(chǔ)單元。l偽指令主要分為下列幾類:偽指令主要分為下列幾類: 程序分段及存儲(chǔ)器分配程序分段及存儲(chǔ)器分配 變量定義及存儲(chǔ)器申請(qǐng)變量定義及存儲(chǔ)器申請(qǐng) 過(guò)程定義過(guò)程定義 符號(hào)定義符號(hào)定義 程序模塊定義與通信程序模塊定義與通信 宏定義及宏調(diào)用宏定義
48、及宏調(diào)用 條件匯編條件匯編 格式控制,列表及其他功能格式控制,列表及其他功能微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令段定義偽指令SEGMENT/ENDSlSEGMENT和和ENDS為程序分段的定義,其為程序分段的定義,其格式如下:格式如下:l段名段名 SEGMENT 定位方式定位方式 組合方式組合方式 類別名類別名l 指令語(yǔ)句或偽指令語(yǔ)句指令語(yǔ)句或偽指令語(yǔ)句l段名段名 ENDS微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令段定義偽指令SEGMENT/ENDSl1
49、段名段名 段名是賦予該段的一個(gè)名稱,它位于段名是賦予該段的一個(gè)名稱,它位于SEGMENT與與ENDS偽指令之前,成對(duì)出現(xiàn),且前后必須一致。段名偽指令之前,成對(duì)出現(xiàn),且前后必須一致。段名的取法與標(biāo)號(hào)、變量名等相同。在同一個(gè)模塊中,不的取法與標(biāo)號(hào)、變量名等相同。在同一個(gè)模塊中,不同段的段名不能相同。同段的段名不能相同。 段名代表該段的段地址。例如,例段名代表該段的段地址。例如,例4-2中的指令:中的指令: MOV AX, DATA MOV DS, AX 表示取數(shù)據(jù)段的段地址表示取數(shù)據(jù)段的段地址(用段名表示用段名表示)送送AX,然后再將然后再將AX(段地址段地址)送數(shù)據(jù)段寄存器送數(shù)據(jù)段寄存器DS。微
50、機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令段定義偽指令SEGMENT/ENDSl2定位方式定位方式 程序的段必須連續(xù)放置在內(nèi)存單元的某個(gè)區(qū)域,并占據(jù)一定的存程序的段必須連續(xù)放置在內(nèi)存單元的某個(gè)區(qū)域,并占據(jù)一定的存儲(chǔ)空間。為了對(duì)程序的段進(jìn)行合理的管理,需要對(duì)段放置的起始儲(chǔ)空間。為了對(duì)程序的段進(jìn)行合理的管理,需要對(duì)段放置的起始地址進(jìn)行規(guī)定,這就是定位方式的作用。有地址進(jìn)行規(guī)定,這就是定位方式的作用。有4種定位類型:種定位類型:BYTE、WORD、PARA、PAGE。起始地址分別為(。起始地址分別為(X表示可為表示可為0或或1):):
51、 BYTE XXXX XXXX XXXX XXXX XXXX B WORD XXXX XXXX XXXX XXXX XXX0 B PARA XXXX XXXX XXXX XXXX 0000 B PAGE XXXX XXXX XXXX 0000 0000 B 分別表示以字節(jié)、字、節(jié)、頁(yè)的邊界為起始地址。如果缺省定位分別表示以字節(jié)、字、節(jié)、頁(yè)的邊界為起始地址。如果缺省定位方式,則以節(jié)(方式,則以節(jié)(PARA)的邊界為起始地址。一節(jié)包含)的邊界為起始地址。一節(jié)包含16個(gè)連續(xù)個(gè)連續(xù)的字節(jié)單元,一頁(yè)包含的字節(jié)單元,一頁(yè)包含256個(gè)連續(xù)的字節(jié)單元。個(gè)連續(xù)的字節(jié)單元。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清
52、華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令段定義偽指令SEGMENT/ENDSl3組合方式組合方式 對(duì)于規(guī)模較大的程序,常將程序分割為多個(gè)模塊。在不同的模塊中,段名可對(duì)于規(guī)模較大的程序,常將程序分割為多個(gè)模塊。在不同的模塊中,段名可以相同,組合方式的作用是指示連接程序,把同名的段按照指定的方式組合以相同,組合方式的作用是指示連接程序,把同名的段按照指定的方式組合起來(lái)形成一個(gè)新的段。組合方式共有起來(lái)形成一個(gè)新的段。組合方式共有6種。種。 (1) NONE:表示該段與其他模塊的段沒(méi)有任何關(guān)系,每段都有自己的基:表示該段與其他模塊的段沒(méi)有任何關(guān)系,每段都有自己的基址。這是
53、缺省方式。址。這是缺省方式。 (2) PUBLIC:表示該段與其它模塊中說(shuō)明為:表示該段與其它模塊中說(shuō)明為PUBLIC方式的同名段互相方式的同名段互相組合成一個(gè)邏輯段,邏輯段的長(zhǎng)度為各段長(zhǎng)度之和。組合成一個(gè)邏輯段,邏輯段的長(zhǎng)度為各段長(zhǎng)度之和。 (3) STACK:表示此段為堆棧段,連接時(shí)把所有:表示此段為堆棧段,連接時(shí)把所有STACK方式的同名段連方式的同名段連接成一個(gè)段,由接成一個(gè)段,由SS指向該段的起始地址。指向該段的起始地址。 (4) COMMON:表示該段與其它模塊中所有已說(shuō)明為:表示該段與其它模塊中所有已說(shuō)明為COMMON的同名段的同名段共享相同的存儲(chǔ)區(qū)域,共享的長(zhǎng)度為模塊同名段中最
54、大長(zhǎng)度,各共享段具有共享相同的存儲(chǔ)區(qū)域,共享的長(zhǎng)度為模塊同名段中最大長(zhǎng)度,各共享段具有相同的段起始地址。相同的段起始地址。 (5) MEMORY方式:表示該段應(yīng)定位在所有其他段的上面。若有多個(gè)段方式:表示該段應(yīng)定位在所有其他段的上面。若有多個(gè)段選用選用MEMORY,則除第一個(gè)之外,其余段均作為,則除第一個(gè)之外,其余段均作為COMMON處理。處理。 (6) AT:表示該段按絕對(duì)地址定位,其段地址即為其后表達(dá)式的值,位移:表示該段按絕對(duì)地址定位,其段地址即為其后表達(dá)式的值,位移量為量為0。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令
55、段定義偽指令SEGMENT/ENDSl4類別名類別名 類別名必須用單引號(hào)括起來(lái)。連接程序把類別類別名必須用單引號(hào)括起來(lái)。連接程序把類別名相同的所有段放在連續(xù)的存儲(chǔ)區(qū)域內(nèi),先出名相同的所有段放在連續(xù)的存儲(chǔ)區(qū)域內(nèi),先出現(xiàn)的段放前現(xiàn)的段放前,后出現(xiàn)的在后,但對(duì)各段不進(jìn)行重后出現(xiàn)的在后,但對(duì)各段不進(jìn)行重新組合。一般總是定義堆棧段的類別名為新組合。一般總是定義堆棧段的類別名為STACK,例如,例,例如,例4-2中中,堆棧段可定義如下堆棧段可定義如下: STACK SEGMENT PARA STACK STACK 表示堆棧段從節(jié)的起始地址開(kāi)始存放表示堆棧段從節(jié)的起始地址開(kāi)始存放,組合方式組合方式為為STA
56、CK, 類別名為類別名為STACK。微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日l(shuí)5指定段內(nèi)的偏移地址指定段內(nèi)的偏移地址 常用的有常用的有ORG和和EVEN兩種說(shuō)明符,是指定下一個(gè)要用的存儲(chǔ)單元的偏移地兩種說(shuō)明符,是指定下一個(gè)要用的存儲(chǔ)單元的偏移地址。址。 (1) 格式:格式: ORG 常數(shù)表達(dá)式常數(shù)表達(dá)式 指定當(dāng)前可用的存儲(chǔ)單元的偏移地址為常數(shù)表達(dá)式的值,就是將常數(shù)表達(dá)式指定當(dāng)前可用的存儲(chǔ)單元的偏移地址為常數(shù)表達(dá)式的值,就是將常數(shù)表達(dá)式的值送入的值送入$。 (2) 格式:格式: EVEN 將當(dāng)前可用的存儲(chǔ)單元的偏移地址調(diào)整為最近的偶數(shù)值,就是將當(dāng)前可
57、用的將當(dāng)前可用的存儲(chǔ)單元的偏移地址調(diào)整為最近的偶數(shù)值,就是將當(dāng)前可用的最小偶數(shù)偏移地址值送入最小偶數(shù)偏移地址值送入$。例如,在下述偽指令語(yǔ)句序列中,例如,在下述偽指令語(yǔ)句序列中,l ORG 1000Hl A DB 47H, 12H, 45Hl EVENl B DB 47Hl這里,指令這里,指令 ORG 1000H 將將A的偏移地址部分指定為的偏移地址部分指定為1000H,從,從A開(kāi)始存放開(kāi)始存放3個(gè)個(gè)字節(jié)變量,占用地址字節(jié)變量,占用地址1000H、1001H和和1002H,B的偏移地址部分本應(yīng)是的偏移地址部分本應(yīng)是1003H,但但EVEN指令會(huì)將指令會(huì)將B的偏移地址部分調(diào)整為偶數(shù)地址的偏移地址
58、部分調(diào)整為偶數(shù)地址1004H。l對(duì)于字?jǐn)?shù)組,為保證其從偶地址開(kāi)始,可在它前面用對(duì)于字?jǐn)?shù)組,為保證其從偶地址開(kāi)始,可在它前面用EVEN 偽操作來(lái)達(dá)到這一偽操作來(lái)達(dá)到這一目的,形如:目的,形如:lDATA-SEG SEGMENTl EVENl WORD-ARRAY DW 100 DUP(?)lDATA-SEG ENDS微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.1 段定義偽指令段定義偽指令SEGMENT/ENDSl6GROUP偽指令偽指令l前述的組合方式是把同名的段按照指定的方式組合起來(lái)形前述的組合方式是把同名的段按照指定的方式組合起來(lái)形成一個(gè)新的
59、段,而成一個(gè)新的段,而GROUP偽指令則用來(lái)把模塊中若干不偽指令則用來(lái)把模塊中若干不同名的段集合成一個(gè)組,使其裝入同一個(gè)物理段中,組內(nèi)同名的段集合成一個(gè)組,使其裝入同一個(gè)物理段中,組內(nèi)各段之間的跳轉(zhuǎn)可視為段內(nèi)跳轉(zhuǎn)。格式如下:各段之間的跳轉(zhuǎn)可視為段內(nèi)跳轉(zhuǎn)。格式如下:l組名組名 GROUP 段名段名 ,l注:組名與段名是一樣的取名規(guī)則,是代表該組的段地址,注:組名與段名是一樣的取名規(guī)則,是代表該組的段地址,格式中的段名也可用表達(dá)式格式中的段名也可用表達(dá)式SEG 變量變量或或 SEG 標(biāo)號(hào)標(biāo)號(hào)來(lái)來(lái)代替,其中代替,其中“SEG”運(yùn)算符表示取變量或標(biāo)號(hào)的段地址運(yùn)算符表示取變量或標(biāo)號(hào)的段地址 。微機(jī)原理與
60、接口技術(shù)微機(jī)原理與接口技術(shù) 清華大學(xué)出版社清華大學(xué)出版社2013年4月24日4.2.2 偏移地址計(jì)數(shù)器偏移地址計(jì)數(shù)器$和定位偽指令和定位偽指令ORGl1偏移地址計(jì)數(shù)器偏移地址計(jì)數(shù)器$l匯編程序在對(duì)源程序進(jìn)行匯編的過(guò)程中,用偏移地址計(jì)數(shù)器匯編程序在對(duì)源程序進(jìn)行匯編的過(guò)程中,用偏移地址計(jì)數(shù)器$來(lái)保存當(dāng)前正在匯來(lái)保存當(dāng)前正在匯編的指令的偏移地址或偽指令語(yǔ)句中變量的偏移地址。編的指令的偏移地址或偽指令語(yǔ)句中變量的偏移地址。l用戶可將用戶可將$用于自己編寫的源程序中。用于自己編寫的源程序中。l在每個(gè)段開(kāi)始匯編時(shí),匯編程序在每個(gè)段開(kāi)始匯編時(shí),匯編程序( 匯編器)都將匯編器)都將$清為清為0,以后,每處理一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中央2025年中國(guó)康復(fù)研究中心招聘高層次人才5人筆試歷年參考題庫(kù)附帶答案詳解
- 承包客運(yùn)列車合同范本
- 科技中心的智能化發(fā)展對(duì)辦公環(huán)境的影響
- 委托結(jié)算合同范本
- 社交媒體營(yíng)銷教育行業(yè)的創(chuàng)新與實(shí)踐案例
- 科技安全普及教育與提升意識(shí)
- 房屋合同產(chǎn)權(quán)合同范本
- 電子科技展廳的色彩與材質(zhì)選擇技巧
- 科技發(fā)展與高校思政教育的互動(dòng)關(guān)系研究
- 社會(huì)支持網(wǎng)絡(luò)對(duì)老年人退休生活的積極影響
- 畢業(yè)論文-基于Java Web的模擬駕??荚囅到y(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 駱駝祥子1一24章批注
- 《中國(guó)古代文學(xué)史》宋代文學(xué)完整教學(xué)課件
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
- 物業(yè)服務(wù)企業(yè)市場(chǎng)拓展戰(zhàn)略規(guī)劃課件
- 2018年青海大學(xué)碩士論文格式模板
- 進(jìn)制轉(zhuǎn)換教學(xué)設(shè)計(jì)
- 垂直度和跳動(dòng)形位公差間的關(guān)系及取代應(yīng)用下
- 兒童跌倒評(píng)估量表(Humpty-Dumpty)
- 臺(tái)虎鉗工作頁(yè)
- 工具鉗工理論知識(shí)鑒定要素細(xì)目表09版
評(píng)論
0/150
提交評(píng)論