資源描述:
《匯編語言課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第4章匯編語言程序設(shè)計(jì)教學(xué)要求:掌握匯編語言源程序的格式,掌握相關(guān)偽指令用途用法熟練掌握順序、分支、循環(huán)三種基本程序設(shè)計(jì)的方法掌握子程序設(shè)計(jì)的方法,模塊結(jié)構(gòu)的程序設(shè)計(jì)方法理解宏匯編設(shè)計(jì)方法匯編語言的特點(diǎn)匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級(jí)程序設(shè)計(jì)語言,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令操作數(shù);利用匯編語言編寫程序的主要優(yōu)點(diǎn)是可以直接、有效地控制計(jì)算機(jī)硬件,因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序;在有些應(yīng)用領(lǐng)域,匯編語言的作用不容置疑無可替代;匯編程序設(shè)計(jì)的過程是與其他高級(jí)語言程序設(shè)計(jì)大致相同;
2、源程序經(jīng)過編輯、匯編、連接形成可執(zhí)行文件;如果存在運(yùn)行錯(cuò)誤,借助調(diào)試程序進(jìn)行排錯(cuò)。4.1匯編語言的源程序格式匯編語言源程序由語句序列構(gòu)成,每條語句一般占一行;完整的匯編語言源程序由段組成;一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列;需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn);所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi);通常,程序還需要一個(gè)堆棧段。匯編語言的語句格式⑴執(zhí)行性語句——用于表達(dá)處理器指令(也稱
3、為硬指令),使CPU產(chǎn)生動(dòng)作、并在程序執(zhí)行時(shí)才處理的指令;匯編后對(duì)應(yīng)一條指令代碼。標(biāo)號(hào):硬指令助記符操作數(shù),操作數(shù);注釋由處理器指令組成的代碼序列是程序設(shè)計(jì)的主體⑵說明性語句——用于表達(dá)偽指令,指示源程序如何匯編、變量怎樣定義、過程怎么設(shè)置等。不產(chǎn)生CPU動(dòng)作、在程序執(zhí)行前由匯編程序處理。名字偽指令助記符參數(shù),參數(shù),……;注釋標(biāo)號(hào)、名字與標(biāo)識(shí)符標(biāo)號(hào)是反映硬指令位置(邏輯地址)和屬性的標(biāo)識(shí)符,后跟一個(gè)冒號(hào)分隔;名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)識(shí)符,后跟空格或制表符分隔,沒有冒號(hào);標(biāo)識(shí)符(Identifier)一般
4、最多由31個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如_、$、?、@)組成,不能以數(shù)字開頭,默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識(shí)符中的字母大小寫;一個(gè)源程序中,每個(gè)標(biāo)識(shí)符的定義是唯一的,還不能是匯編語言采用的保留字。保留字保留字(ReservedWord)是匯編程序已經(jīng)利用的標(biāo)識(shí)符(也稱為關(guān)鍵字),主要有:硬指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、DW操作符——例如:OFFSET、PTR寄存器名——例如:AX、CS預(yù)定義符號(hào)——例如:@data操作數(shù)和參數(shù)處理器指令的操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)單元;偽指令的參數(shù)
5、可以是常數(shù)、變量名、表達(dá)式等,可以有多個(gè),參數(shù)之間用逗號(hào)分隔。注釋語句的4個(gè)組成部分要用分隔符分開標(biāo)號(hào)后用冒號(hào),注釋前用分號(hào)操作數(shù)之間和參數(shù)之間使用逗號(hào)分隔其他部分通常采用空格或制表符多個(gè)空格和制表符的作用與一個(gè)相同分隔符語句中由分號(hào)“;”開始的部分為注釋內(nèi)容,用以增加源程序的可讀性;一個(gè)語句行也可以由分號(hào)開始作為階段性注釋匯編程序在匯編時(shí)跳過注釋部分,不對(duì)它們做任何處理例4.1在屏幕上顯示一段信息;數(shù)據(jù)段(定義要顯示的字符串)stringdb’Hello,Assembly!’,0dh,0ah,’$’;代碼段(顯示字符串
6、的程序)movdx,offsetstringmovah,9int21hHello,Assembly!程序功能4.1.1簡(jiǎn)化段定義格式.modelsmall;定義程序的存儲(chǔ)模式(小型模式).stack;定義堆棧段(默認(rèn)是1KB空間).data;定義數(shù)據(jù)段……;數(shù)據(jù)定義.code;定義代碼段start:movax,@data;程序起始點(diǎn)movds,ax;設(shè)置DS指向用戶定義的數(shù)據(jù)段……;程序代碼movax,4c00hint21h;程序結(jié)束點(diǎn),返回DOS……;子程序代碼endstart;匯編結(jié)束,同時(shí)指明程序起始點(diǎn)start1
7、.存儲(chǔ)模式(MemoryModel)存儲(chǔ)模式?jīng)Q定了一個(gè)程序的規(guī)模,也確定了子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問等的缺省屬性當(dāng)使用簡(jiǎn)化段定義的源程序格式時(shí),必須有存儲(chǔ)模式.MODEL語句,且位于所有簡(jiǎn)化段定義語句之前。其格式為:.MODEL存儲(chǔ)模式.MODEL語句確定了程序采用的存儲(chǔ)模式,MASM有7種可以選擇,如表3.1所示本課程學(xué)習(xí)過程中,均采用小型模式SMALL2.邏輯段的簡(jiǎn)化定義.STACK[大小];堆棧段定義偽指令.STACK創(chuàng)建一個(gè)堆棧段,段名是:STACK。堆棧段名可用@STACK預(yù)定義標(biāo)識(shí)符表示??蛇x的“大小”參
8、數(shù)指定堆棧段所占存儲(chǔ)區(qū)的字節(jié)數(shù),默認(rèn)是1KB(=1024=400H字節(jié)).DATA;數(shù)據(jù)段定義偽指令.DATA創(chuàng)建一個(gè)數(shù)據(jù)段,段名是:_DATA。數(shù)據(jù)段名可用@DATA預(yù)定義標(biāo)識(shí)符表示.CODE[段名];代碼段定義偽指令.CODE創(chuàng)建一個(gè)代碼段,可選的“段名”參數(shù)指定該代碼段的段名。如果沒有給出段名,則采用默認(rèn)段名一