一、源文件
源文件是由文字編緝器編寫的由匯編指令和MASM51偽指令構(gòu)成的文本文件。源文件一般應(yīng)以.ASM為擴展名。
二、源文件的格式
以回車作為結(jié)束的一行稱為語句行。每一語句行長度應(yīng)少于80個字符(即40個漢字)。每一個語句行對于匯編程序來說都是一條單獨的命令行,它可以是一條匯編語言指令,也可以是一條注釋,或是空白(即什么也不寫),還可以是系統(tǒng)允許的偽指令。所有行必須按照INTEL標(biāo)準(zhǔn)格式書寫即:
標(biāo)號: 命令 參數(shù) ;注釋
即一行由四部份組成,各部份的順序不能搞錯,但可以根據(jù)需要缺省其中的一部份或幾部份,甚至全部省去,即空白行。標(biāo)號后面必須有‘:’,而命令語句和參數(shù)之間必須用空格分開,如果命令有多個參數(shù),則參數(shù)與參數(shù)之間必須用‘,’分開,注釋前必須用‘;’,也即‘;’后面的語句將不參與匯編,不生成代碼,所以可以在‘;’引導(dǎo)的后面寫任何字符,包括漢字。
標(biāo)號是標(biāo)志程序中某一行的符號名,標(biāo)號的數(shù)值就是標(biāo)號所在行代碼的地址。在宏匯編MASM51中標(biāo)號的長度不受限制,但標(biāo)號中不能包含‘:’或其它的一些特殊符號,也不以用漢字,可以用數(shù)字作標(biāo)號,但必須用字母開頭。當(dāng)標(biāo)號作參數(shù)用(如標(biāo)號作轉(zhuǎn)移地址),在命令后面出現(xiàn)時,必須舍去‘:’(如 LJMP START中的 START)。
每行只能有一個標(biāo)號,一個標(biāo)號只能用在一處,如果有兩行用了同一個標(biāo)號,則匯編時就會出錯。由于標(biāo)號的長度沒有限制,可以用有意義的英文來說明行,使源程序讀起來更方便。
命令及參數(shù)請參考有關(guān)單片機教材,其規(guī)定符合INTEL公司的51單片機匯編語言要求。這里必須注意:當(dāng)采用十六進制數(shù)時,如果數(shù)值是以A,B,C,D,E,F開頭的,則為了區(qū)分是數(shù)字還是字母,應(yīng)當(dāng)在這些數(shù)字前加'0',如FFH,應(yīng)當(dāng)寫成0FFH,C0H應(yīng)寫成0C0H等。
注釋用于對程序的說明,它以分號開始,以回車結(jié)束。源程序行可以只包含注釋,注釋只是被復(fù)制到列表文件中,不產(chǎn)生機器碼。由于匯編程序不直觀,所以在編寫源程序時,應(yīng)當(dāng)養(yǎng)成多寫注釋的習(xí)慣,這樣有助于源程序的閱讀。否則,時間一長,自編的程序也會搞不清表達的含義。典型的注釋有如下幾種:
?。保谝恍械暮竺鎸?,以說明這一行語句的用途;
2.在一段子程序的前面寫,以說明這一子程序的用途,由什么程序調(diào)用,入口參數(shù),出口值,占用資源等等情況;
?。常谡麄€源程序的前面書寫,以說明本程序的用途,資源的分配等情況。以下是一個例子:
;堆棧從5FH起
;01H單元,用作鍵盤掃描程序判斷是否有鍵按下,有為'1',無為'0'
;38H單元,音量大小代碼,初始為2
ORG 0000H
LJMP START
ORG 0003H ;外中斷0處理程序
NOP
RET
START: ;初始化程序
MOV SP,5FH
.
.
;***********************************************
;以上初始化程序
;***********************************************
MAIN:
LCALL KEY
LJMP MAIN
;**********************************************
;以上主程序
;*******************************************
;***********************************************
;以下鍵盤程序,鍵值從0開始
;***************************************
KEY:
PUSH PSW ;將PSW推入堆棧
SETB RS0 ;選工作區(qū)
MOV SBUF,#00H
KEY_DISP:
.
.
.
POP PSW
RET
;*********************************************************
;以上鍵盤程序
;********************************************************
.
.
三、算術(shù)表達式和算術(shù)操作
在宏匯編中允許使用一個算術(shù)表達式的結(jié)果來作為一個參數(shù)使用,從而使編寫源程序時更為靈活。算術(shù)表達式由參數(shù)與算術(shù)操作符組成,其中參數(shù)可以是數(shù)值類型,符號類型或字符串類型。而算術(shù)表達式的運算結(jié)果即為該算術(shù)表達式所代表的參數(shù)。它是一個十六位的二進制數(shù)。在可以用數(shù)值的任何地方,都可以使用表達式,例如直接值,轉(zhuǎn)移和子程序調(diào)用的址址部分。匯編命令內(nèi)表達式由匯編解釋程序在匯編時計算,改變表達式值的方法就是修改參數(shù)值。
算術(shù)表達式的簡單的形式就是只有一個參數(shù),這個參數(shù)的值也就是它的結(jié)果。一般形式為參數(shù)與算術(shù)操作符的組合,它們之間用某些限定符予以隔離,例如空格、制表符等。
在宏匯編中,所有的參數(shù)值均為整數(shù),以十六位二進制形式存放,因此其表示范圍為0~65535。對于負(fù)數(shù)則以其補碼來表示。下面給出一個例子介紹宏匯編中允許使用的各種算術(shù)操作符,請大家仔細(xì)閱讀。
MOV A,#3+5 ;MOV A,#8,加法,前面加'#'號代表是立即數(shù)
MOV A,3+5 ;MOV A,8 ,加法,未加'#'號代表3+5是地址
MOV A,5-3 ;MOV A,2 ,減法
MOV A,3-5 ;MOV A,0FEH,減法
MOV A,#5-3 ;MOV A,#2,減法
MOV A,#5*3 ;MOV A,#15,乘法
MOV A,#6/3 ;MOV A,#2 ,除法
MOV A,#6 MOD 3 ;MOV A,#0 ,取模運算
MOV A,01010010 SHR 3 ;MOV A,E3H ,向右移位,01010010向右移3位
MOV A,#21 SHL 5 ;MOV A,#0A0H ,向左移位,21向左移5位
MOV A, # NOT 0A5H ;MOV A,#5AH ,取0A5H的反
MOV A,#10101111 OR 11110000 ;MOV A,#57H,求兩數(shù)之或
MOV A,#10101010 AND 00001111 ;MOV A,#52H,求兩數(shù)之與
MOV A,#4B2H XOR 3197 ;MOV A,#0CFH,求兩數(shù)之異或
MOV A,#(HIGH 4567H) ;MOV A,#45H ,取4567H的高兩位
MOV A,LOW 4567H ;MOV A,67H ,取4567H的低兩位
END
四、機器碼代碼文件
機器碼代碼文件由宏匯編產(chǎn)生,為了與一般的HEX文件相區(qū)別,通常由宏匯編產(chǎn)生的機器碼代碼文件被稱為INTEL文件。該文件是由能夠在處理器上運行的機器指令碼組成。它可被用來傳送到仿真器或用戶系統(tǒng)中進行調(diào)試或運行。
?。桑危裕牛?HEX文件由若干行組成,每行表示一個記錄,它的每一行都是可以打印的ASCII字符,用兩個字符,用兩個字符來表示一個字節(jié)的值。每一行的格式如下:
:CC aaaa tt dd.......dd ss冒號":"為每一行的起始符,隨后為一組數(shù)據(jù)在其中。CC 為由兩個字節(jié)表示的十六進制數(shù),它的范圍為00H~10H,它表示該記錄包含的機器代碼的字節(jié)數(shù)。
aaaa為用ASCII碼表示的四個十六進制數(shù),它是該記錄個數(shù)據(jù)字節(jié)所駐存的存儲空間的地址。
tt是表示該記錄數(shù)據(jù)類型的一個代碼,若該記錄為數(shù)據(jù),則tt為0,否則是其它值。dd表示代碼的實際字節(jié)值,每一個字節(jié)值用兩個字符表示。(將會有cc個dd數(shù)據(jù))ss是一個和校驗,它是從計數(shù)器到一個數(shù)據(jù)字節(jié)的所有字節(jié)值累加和的相所數(shù)。
當(dāng)ss與記錄中所有的字相加時,其結(jié)果應(yīng)該為零,若為其它值則表明該記錄有錯。
五、列表文件
由匯編程序生成的第二個文件是列表文件,它以LST為擴展名,也是一個ASCII碼字符文件,回而可以被打印顯示,也可以作為程序的文檔。
列表文件是分頁的,每頁的長度由缺省值決定。也可以通過偽指令&PAGE來決定。每頁以一起始行開始,用來指出匯編的類型類型和版本,以及頁號。
當(dāng)用戶使用&TITLE偽指令時,該行后面緊接著一個標(biāo)題行,當(dāng)用戶使用SUBTITLE指令時,后再接一個子標(biāo)題行。例如:The Cybernetic Micro Sysystems 8051 FamilyAssembler,Version 3.03 Page 109-10-83。
每頁的其它部分由用戶程序、匯編所產(chǎn)生的地址和機器代碼組成。通常一個行的個字符是一個空格,若出現(xiàn)"I"則指出這一行是個外部來的文件。而"+"則表明是一個宏擴展行。后面接著的四個字符通常是當(dāng)前語句的程序地址,以十六進制形式給出,END指令前的四個字符表示該指令的起始地址參數(shù)值。后面有一個空格。
程序計數(shù)器后是10個字符的空間,它通常包含該行匯編出的目標(biāo)代碼的十六進制值。顯示出的字節(jié)值的數(shù)目依賴于每條語句所要求的字節(jié)數(shù)目,這里,每個字節(jié)值用兩字符表示。對等價指令,這個域還包含一個等號(=)。不生成目標(biāo)代碼的源程序行中該域全為空格。
每行的前16個字符后面的剩余部分包含著臺的源程序文件。因而列表文件的每一行長度為源程序的長度再加上16列字符。如果是用80列寬的打印紙則源程序行的長度應(yīng)小于64列,否則打印設(shè)備在打印時反長行切斷,或則分成兩行。
匯編程序輸入與輸出文件格式
更新時間: 2007-07-20 13:48:30來源: 粵嵌教育瀏覽量:1065
推薦閱讀
- ·如何保障固件升級的安全性:防斷電與校驗機制設(shè)計
- ·2025年智能家房系統(tǒng)設(shè)計與工程安裝師資培訓(xùn)班(省級培訓(xùn)))順利結(jié)業(yè)
- ·嵌入式開發(fā):ROTS與Linux的技術(shù)本質(zhì)差異
- ·STM32單片機引腳分類詳解與開發(fā)實踐
- ·攜手共進,共筑智能海洋裝備新未來 —— 粵嵌科技與智能海洋裝備現(xiàn)代產(chǎn)業(yè)學(xué)院簽約儀式年
- ·校企合作新突破 | 粵嵌科技與三亞學(xué)院共探產(chǎn)教融合新路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學(xué)探索 AGI 時代教學(xué)新范式
- ·廣州粵嵌通信科技股份有限公司關(guān)于虛假返還款項通知的嚴(yán)正聲明
- ·佛山市冠宇達電源有限公司專場招聘會(長沙校區(qū))
- ·北京朝歌數(shù)碼科技股份有限公司專場招聘