ASM-51宏匯編使用手冊(cè)
ASM-51 宏匯編主要用來(lái)開(kāi)發(fā)Inter8051系列單片機(jī),它具有宏處理,數(shù)據(jù)處理,列表處理和條件處理等多種功能。源程序的編寫(xiě)完全采用 Inter標(biāo)準(zhǔn)助記符和行格式。在編寫(xiě)程序過(guò)程中,可借助于文本編輯(Windows的記事本)或文字處理軟件Word等編輯, 經(jīng)ASM-51匯編后生成列表輸出文件(.LST)和目標(biāo)代碼文件(.HEX)。 此目標(biāo)代碼文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051進(jìn)行模擬/調(diào)試,或直接用于硬件仿真器上運(yùn)行。當(dāng)然,這也是要燒寫(xiě)到單片機(jī)ROM中的代碼。
??? 1、 宏匯編語(yǔ)言的基本語(yǔ)法
??? 1、1? 宏匯編的特點(diǎn)
??? ASM-51宏匯編完全支持Inter助記符的匯編語(yǔ)言,它含有宏語(yǔ)句,英文大小寫(xiě)字母,變量名,標(biāo)號(hào)等不受限制,有二,十,十六進(jìn)制和串參數(shù)類(lèi)型,有匯編控制指令和多層條件語(yǔ)句,程序邏輯分段, 還有模塊化程序設(shè)計(jì)的連接功能,匯編速度快等特點(diǎn)。
??? 1、2 匯編處理過(guò)程
??? (1) 用行編輯EDLIN或文字處理軟件WS或全屏幕編輯軟件PE等,編輯宏匯編
語(yǔ)言源程序,它的文件擴(kuò)展名為。ASM。
??? (2) 用ASM-51宏匯編程序?qū)ι鲜鲈闯绦蛭募M(jìn)行匯編,產(chǎn)生擴(kuò)展名為.LST的列表輸出文件和擴(kuò)展名為.HEX的目標(biāo)代碼文件(.HEX)。 列表輸出文件包含源程序語(yǔ)句所匯編成的代碼,以及有關(guān)的地址,語(yǔ)句和符號(hào)表等。 目標(biāo)代碼文件包含源程序語(yǔ)句所匯編成的代碼, 不包含任何符號(hào)信息或助記符。 進(jìn)行模擬/調(diào)試,或直接用于硬件仿真器上運(yùn)行。
??? 1、3 語(yǔ)句
??? 匯編語(yǔ)言可分為兩類(lèi)語(yǔ)句:指令性語(yǔ)句和指示性語(yǔ)句。
??? (1)指令性語(yǔ)句
??? 這一類(lèi)語(yǔ)句是指在匯編過(guò)程中能生成指令代碼的語(yǔ)句(如 MOV ,DEC等)。其格式為:
???? [標(biāo)號(hào):] [指令助記符] [操作數(shù)] [;注釋]
??? 其中方括號(hào)[? ]中為選擇項(xiàng)。下同。
??? (2)指示性語(yǔ)句
??? 這一類(lèi)語(yǔ)句即通常所說(shuō)的偽指令,它指示匯編程序后面的指示性語(yǔ)句如何產(chǎn)生代碼。
??? ASM-51宏匯編完全支持Inter助記符的匯編語(yǔ)言,因此匯編程序的格式,指令完全與8051匯編語(yǔ)言一樣,這里不再介紹它們的指令系統(tǒng)。
??? 1、4 常量與數(shù)值運(yùn)算
??? (1) 常量及其表示
??? 常量,就是在匯編時(shí)已經(jīng)確定的值。 在匯編語(yǔ)言中,常量主要用作指令性語(yǔ)句中的直接操作數(shù),也可用于存儲(chǔ)器操作的組成部分(如位移量),或者為偽指令中的變量輸初值。
?? 為便于程序設(shè)計(jì),常量有多種表示形式:二、十、十六進(jìn)制數(shù)和字符串等,它們的格式各不相同,并采用不同的基數(shù)標(biāo)記加以區(qū)分。表--1列出其格式。?
? 表--1
數(shù)據(jù)形式???? 格?? 式???? 取值范圍????? 例 如??????? 備?? 注
?2進(jìn)制????? ********B????? 0,1??????? 10011100B
10進(jìn)制?????? ******????? 0,1,2...9??? 45723?????? 缺省基數(shù)標(biāo)記
16進(jìn)制?????? ****H?????? 0,1...E,F(xiàn)??? 0CDE3H????? 最前面一個(gè)字符應(yīng)是0--9
ASCII??????? '**'???????? ASCII??????? 'AD'?????? 只有DB命令中使用
?
??? 常量以數(shù)值形式直接寫(xiě)在匯編語(yǔ)言的語(yǔ)句中稱(chēng)為字面常量, 若預(yù)先為它定義一個(gè)符號(hào)名,然后在語(yǔ)句中用符號(hào)名來(lái)表示該常量稱(chēng)符號(hào)常量。使用符號(hào)常量的優(yōu)點(diǎn)可改善程序的可讀性,它的定義需要使用偽操作命令"EQU"或“=“。
??? (2) 數(shù)值運(yùn)算
??? 宏匯編中,所有參數(shù)值均被認(rèn)為是整數(shù),并以16位的形式存放,表示的范圍是0---65535,所有算術(shù)操作均對(duì)整數(shù)以補(bǔ)碼形式運(yùn)算。
??? (1) 基本運(yùn)算
??? 匯編語(yǔ)言對(duì)常量允許進(jìn)行算術(shù)運(yùn)算,邏輯運(yùn)算,分離運(yùn)算等三種類(lèi)型的運(yùn)算。如表--2所示。?
?表--2???????????????? 基本運(yùn)算
? 運(yùn)? 算??? 操?? 作?????? 含? 義?????????? 以ADD為例
??? 算??????? +?????????? 加操作???????? ADD? A,R1+36
??????????????? -?????????? 減操作???????? ADD? A,R1-2EH
??????????????? *?????????? 乘操作???????? ADD? A,R1*0E3H
??? 術(shù)??????? /?????????? 除操作???????? ADD? A,R1/23
???????????? MOD????????? 模除?????????? ADD? A,R1 MOD 12
???????????? SHR????????? 右移?????????? ADD? A,R1 SHR 3
???????????? SHL????????? 左移?????????? ADD? A,R1 SHL 2
??? 邏?????? AND????????? 與操作???????? ADD? A,R1 AND 10000101B
???????????? OR?????????? 或操作???????? ADD? A,R1 OR 00110000B
???????????? XOR????????? 異或操作?????? ADD? A,R1 XOR 36H
??? 輯?????? NOT????????? 非操作???????? ADD? A, NOT 45H
??? 分?????? HIGH???????? 高字節(jié)分離???? ADD? A, HIGH 05E2H
??? 離?????? LOW????????? 低字節(jié)分離???? ADD? A, LOW 77F0H
?
說(shuō)明:?? R1為符號(hào)常量。
??? (2) 綜合運(yùn)算
??? 綜合運(yùn)算規(guī)則 1: 計(jì)算表達(dá)式時(shí),所有的運(yùn)算全部從左到右順序進(jìn)行,遇到操作數(shù)就進(jìn)行運(yùn)算,不考慮優(yōu)先關(guān)系,括號(hào)有助于視覺(jué)理解,但不改變表達(dá)式的?計(jì)算順序。
??? 例如:???? R1 SET NOT(0C5FH OR 000CH)
????????????? 其結(jié)果應(yīng)為 0F3ACH。
??? 綜合運(yùn)算規(guī)則 2: 當(dāng)兩個(gè)操作數(shù)之間沒(méi)有參數(shù)相隔時(shí), 第二個(gè)操作符優(yōu)先于第一個(gè)操作符計(jì)算。
??? 例如:??? R1 SET NOT 10011010B
???????????? 其結(jié)果應(yīng)為 65H。
??? 1、5 程序分段
??? 8051系列的處理器的結(jié)構(gòu), 把內(nèi)存分成五個(gè)獨(dú)立的內(nèi)存段, 即代碼段(段名CSEG),數(shù)據(jù)段(段名DSEG), 外部段(段名XSEG), 功能段(段名FSEG)和位段(段名BSEG)等。 各個(gè)段在源程序中的次序可以任意,段的數(shù)目可以根據(jù)需要確定,原則上不受限制。程序中的所有段都必須用段名開(kāi)頭,段結(jié)束語(yǔ)句ENDS結(jié)束。
??? 1、6 源文件
??? 源文件是由匯編語(yǔ)言代碼和匯編程序指令組成的 ASCII 字符文件, 擴(kuò)展名為。ASM。源文件的每一語(yǔ)句行,最多有四個(gè)域。每一行的長(zhǎng)度不超過(guò)80個(gè)字符, 且以“回車(chē)“鍵結(jié)束。
??? 1、7 列表輸出文件和目標(biāo)代碼文件
??? (1) 目標(biāo)代碼文件(.HEX)
??? 目標(biāo)代碼文件(.HEX)是ASCII文件,它只包含由各種程序語(yǔ)句所生成的代碼,而不包含任何信息或助記符。 該文件是能夠在處理器上運(yùn)行的實(shí)際機(jī)器指令碼。
??? 目標(biāo)代碼文件格式如下:
??????? :cc????? aaaa?????? tt??? dd?? aa?? dd???? ss????
??????? 計(jì)數(shù)器????????? 數(shù)據(jù)類(lèi)型????? 記錄地址??????????? 回車(chē)
??????????????? 記錄地址???????????? 代碼的字節(jié)??? 和校驗(yàn)
??? 目標(biāo)代碼文件(.HEX)的每一行以一個(gè)冒號(hào)開(kāi)始, 后面跟著的數(shù)字和符號(hào)分別表示十六進(jìn)制數(shù)據(jù)的計(jì)數(shù)器(cc),記錄第一個(gè)數(shù)據(jù)字節(jié)的16位地址(aaaa),目標(biāo)記錄的數(shù)據(jù)類(lèi)型(tt),代碼的實(shí)際字節(jié)(dd),計(jì)數(shù)器從第一個(gè)數(shù)據(jù)字節(jié)到最后的所有字節(jié)值累加和的相反數(shù)即和校驗(yàn)(ss)等等。
??? (2)列表輸出文件(.LST)
??? 列表輸出文件也是個(gè)ASCII文件,它由源程序和目標(biāo)代碼文件組成, 可作為程序文檔也可被打印。
??? 列表輸出文件是分頁(yè)顯示,打印的,其長(zhǎng)度由缺省值或偽指令$PAGE決定。 每頁(yè)一開(kāi)始指出匯編程序的類(lèi)型,版本以及頁(yè)號(hào)等。
??? 2、 偽操作指令
??? 匯編語(yǔ)言中的指示性語(yǔ)句(偽指令),不象指令性語(yǔ)句會(huì)產(chǎn)生目標(biāo)代碼, 它主要是用來(lái)“控制指揮“匯編程序如何把指令性語(yǔ)句翻譯成目標(biāo)代碼。除本身偽指令申請(qǐng)分配一部分存貯空間作數(shù)據(jù)區(qū)和堆棧區(qū)外,不產(chǎn)生任何目標(biāo)代碼。
??? 按照它們的功能,大致分成七類(lèi): 符號(hào)定義偽操作,段定義偽操作,數(shù)據(jù)定義崐偽操作,列表偽操作,條件偽操作,宏處理偽操作以及其它操作等。如表--3所示。
?
??? 表--3??????? 偽操作指令
序號(hào)???? 分??? 類(lèi)????????????? 偽? 操? 作? 指? 令
?1??? 符號(hào)定義偽操作?????? EQU,=,DATA,BYTE,WORD,BIT,SET
?2??? 段定義偽操作???????? ORG,END,CSEG,DSEG,XSEG,F(xiàn)SEG,ENDS
?3??? 數(shù)據(jù)定義偽操作?????? DB,DW,DS
?4??? 列表偽操作?????????? $TITLE,$SUBTTL,$PAGE,$LIST,$NOLIST,$NOCODE
?5??? 條件偽操作?????????? IF,ELSE,ENDIF
?6??? 宏處理偽操作???????? MACRO,ENDM
?7??? 其????? 它?????????? ALTNAME,INCLUDE
?
??? 2、1 符號(hào)定義偽操作
??? 符號(hào)定義偽操作及其格式:????? 符號(hào)名? 符號(hào)定義名? 常量或表達(dá)式
??? 其中符號(hào)定義名可以為EQU,=,DATA,BYTE,WORD,BIT,SET等。下面就是這些符
號(hào)定義偽操作的用法及說(shuō)明。如表--4所示。
?
??? 表--4??????? 符號(hào)定義偽操作
符號(hào)定義名????????? 用????????? 法????????????????? 說(shuō)??????? 明
? EQU???????? 為常量,符號(hào)名等定義符號(hào)化常量名??? 符號(hào)名不能重名定義
?? =????????? 為常量,符號(hào)名等定義符號(hào)化常量名??? 符號(hào)名不能重名定義
? DATA??????? 用來(lái)為一個(gè)字節(jié)類(lèi)型的符號(hào)定值?????? 符號(hào)名不能重名定義
? BYTE??????? 用來(lái)為一個(gè)字節(jié)類(lèi)型的符號(hào)定值?????? 符號(hào)名不能重名定義
? WORD??????? 用來(lái)為一個(gè)字類(lèi)型的符號(hào)定值???????? 符號(hào)名不能重名定義
???????????????????????????????????????????????? 8051中沒(méi)有字操作
? BIT???????? 用來(lái)定義一個(gè)字位類(lèi)型
? SET???????? 用來(lái)定義整數(shù)類(lèi)型的符號(hào)名?????????? 符號(hào)名可重名定義
?
??? DATA與BYTE的區(qū)別: DATA與BYTE是相類(lèi)似的偽指令。 當(dāng)程序運(yùn)行到DATA偽指令定義的符號(hào)名時(shí),該符號(hào)名將被顯示;而由BYTE定義的符號(hào)名不被顯示。
??? 2、2 段定義偽操作
??? (1)? ORG? 用于設(shè)置或改變程序計(jì)數(shù)器的值。
??? 其格式為:??????????? ORG??? 常數(shù)或表達(dá)式
??? 例如:? ORG? 0008H
??????????? ORG? $+5
??? 其中$表示程序計(jì)數(shù)器的當(dāng)前值。
??? (2)? END? 表示源代碼結(jié)束。
??? 其格式為:??????????? END? 常數(shù)或表達(dá)式
??? 匯編程序遇到END語(yǔ)句即停止運(yùn)行。 若程序中沒(méi)有END,則在匯編源程序時(shí)顯出錯(cuò)
??? (3)? 8051系列的處理器把內(nèi)存結(jié)構(gòu)分成五個(gè)段,代碼段CSEG,數(shù)據(jù)段DSEG,外部段XSEG,功能段FSEG和位段BSEG等,其用法及區(qū)別如 表--5所示。
??? 在匯編以上各段所定義的符號(hào)時(shí),系統(tǒng)根據(jù)符號(hào)所在不同段,賦與不同類(lèi)型的字母,如表--6所示。
??? 2、3? 數(shù)據(jù)定義偽操作
??? 數(shù)據(jù)定義偽操作格式:
???????? [ 標(biāo)號(hào): ]?? 數(shù)據(jù)定義名? [ 表達(dá)式1,表達(dá)式2,。。。 ]
??? 其中數(shù)據(jù)定義名可為DB,DW,DS等。
??? 如表--7所示,數(shù)據(jù)定義偽操作的含義及說(shuō)明。
?
??? 表--5??????????? 段定義偽操作
? 段??????????????????? 用????? 法????? 及????? 區(qū)????? 別
代碼段(CSEG)?? 包含由處理器所執(zhí)行的程序。段名可缺省。有目標(biāo)代碼生成。
數(shù)據(jù)段(DESG)?? 由內(nèi)部工作寄存器的處理器的RAM組成。用來(lái)對(duì)程序使用的數(shù)據(jù)地址賦符號(hào)名,大多以O(shè)RG,DATA,BYTE,WORD,EDNS等組成。???? 無(wú)目標(biāo)碼生成。
外部段(XSEG)?? 由外部工作寄存區(qū)和RAM組成。使用方法同數(shù)據(jù)段。無(wú)目標(biāo)碼生成。
功能段(FSEG)?? 由特殊寄存器位置組成(如:輸入/輸出部件,計(jì)時(shí)器,中斷控制和連續(xù)的寄存器部件接口等)。無(wú)目標(biāo)代碼生成。
位? 段(BSEG)?? 由一些獨(dú)立的位組成,可以用布爾函數(shù)實(shí)現(xiàn)。 該段地址被解釋為位地址。無(wú)目標(biāo)代碼生成。
?
??? 表--6????????????? 程序分段的類(lèi)型符號(hào)
?? 段?????????? 標(biāo)號(hào)(Label) 字節(jié)型操作數(shù)(Byte)? 字型操作數(shù)(Word)
代碼段CSEG????? L??????????????? D??????????????????? W
數(shù)據(jù)段DSEG????? D??????????????? D??????????????????? W
外部段XSEG????? X??????????????? X??????????????????? E
功能段FSEG????? F??????????????? F??????????????????? G
位? 段BSEG????? B??????????????? B??????????????????? B
?
??? 說(shuō)明:?? (1)在不同的段中類(lèi)型符號(hào)不同;
??????????? (2)字節(jié)型操作數(shù)(Byte)一般通過(guò)DATA指令賦給符號(hào); 字型操作數(shù)
一般通過(guò)WORD指令賦給符號(hào);
??????????? (3)如果各段中用BYTE賦值,則在各段中符號(hào)全以S表示;在SIM51模
擬/調(diào)試中的符號(hào)區(qū)顯示功能中,對(duì)BYTE賦值的將被跳過(guò)。
??????????? (4)在各段中,位類(lèi)型可以用BIT指令賦給。
?
?? 表--7?????????? 數(shù)據(jù)定義偽操作
數(shù)據(jù)定義名??????? 含????????? 義??????????????? 說(shuō)??????????????? 明
??? DB??? 用于定義一個(gè)字節(jié)包含的值????? 表達(dá)式不是字符串時(shí),每個(gè)表達(dá)式賦給一個(gè)字節(jié),是字符串時(shí),用單引號(hào) “ ' “ 作為分隔符。
??? DW??? 用于定義一個(gè)字(16位)??? 每個(gè)表達(dá)式占16位。 如果表達(dá)式中的存貯內(nèi)容為字符串,只取最后兩個(gè)字符。若字符串只有一個(gè)字符,高字節(jié)置“0“。
??? DS????? 定義一個(gè)存貯區(qū)???? 通常用在代碼段中,作為程序的一部分。若用在數(shù)據(jù)段,外部段,則作為位置標(biāo)志使用。
??????? 表--8????????????? 列表偽操作
?? 偽指令????????? 含義及格式??????????????????? 說(shuō)????????????? 明
?? $TITLE??? 給源程序指定一個(gè)標(biāo)題??????????? 標(biāo)題不加 “? “,其最大長(zhǎng)度
???????????? 格式: $TITLE [標(biāo)題行]?????????? 60個(gè)字符。若標(biāo)題行省略, 原來(lái)定義的標(biāo)題行作廢。
?? $SUBTTL? 給源程序指定一個(gè)副標(biāo)題?????????? 副標(biāo)題不加 “? “,其最大長(zhǎng)
??????????? 格式: $SUBTTL [副標(biāo)題行]???????? 度60字符。若副標(biāo)題行省略,原來(lái)定義的副標(biāo)題行作廢。
?? $PAGE??? 用于形成或定義新的一頁(yè)或行數(shù)???? 匯編時(shí)頁(yè)長(zhǎng)為66行(適合于格式: $PAGE [表達(dá)式] 標(biāo)準(zhǔn)打印紙)。表達(dá)式最大為65535,最小為12, 表達(dá)式缺省,則從新的一頁(yè)開(kāi)始。
?? $LIST???? 使源程序匯編時(shí),產(chǎn)生程序清單??? 匯編時(shí)無(wú)此指令照樣產(chǎn)生清單。
???????????? 格式: $LIST
?? $NOLIST?? 使源程序匯編時(shí)不產(chǎn)生程序清單
???????????? 格式: $NOLIST
?? $NOCODE?? 源程序匯編時(shí),條件匯編程序值??? 沒(méi)有此指令匯編時(shí),不論其值是為假的不產(chǎn)生清單。真、假的條件都不產(chǎn)生目標(biāo)碼。
???????????? 格式: $NOCODE
??? 2、4? 列表偽操作
??? 如表--8所示,列表偽操作的含義,格式及說(shuō)明。
??? 2、5 條件偽操作
??? 條件偽操作格式:
?????????? IF?? 表達(dá)式
?????????????? [ 程序塊1 ]
?????????? [ ELSE ]
?????????????? [ 程序塊2 ]
?????????? ENDIF
?? 當(dāng)IF指令中的表達(dá)式為真時(shí),被匯編的代碼段是程序塊1;當(dāng)IF指令中的表達(dá)式為假時(shí),被匯編的代碼段是程序塊2。 在一個(gè)條件結(jié)構(gòu)中,僅有一個(gè)代碼段被匯編,其它的則被忽略。
??? 2、6 宏處理操作
??? 在源程序中,如果有一段程序需要多次使用,為使程序不重復(fù)書(shū)寫(xiě)這段程序,可用宏定義把所需要重復(fù)出現(xiàn)的程序塊定義成宏指令,此后在宏指令出現(xiàn)的地方,宏匯編程序總是自動(dòng)地把它們替換成相應(yīng)的代碼段。
??? (1) 宏指令格式
??????? [ 宏指令名 ]? MACRO? [形式參數(shù),。。。]
????????????????????? 代碼段
????????????????????? ENDM
??? 在宏定義中,使用了“形式參數(shù)“,它們引用宏指令時(shí)被給出的一些名字或數(shù)值(實(shí)在參數(shù))所替換。使用形式參數(shù)給宏指令帶來(lái)了很大的靈活性。
??? (2)宏調(diào)用格式
??????? [ 宏指令名 ]? [實(shí)在參數(shù),。。。]
??? 注意:1、當(dāng)有兩個(gè)以上的實(shí)參數(shù)時(shí),它們之間要用逗號(hào),空格或列表符隔開(kāi)。
????? 2、實(shí)參數(shù)項(xiàng)將對(duì)應(yīng)替換宏指令中形式參數(shù)。如果形式參數(shù)為標(biāo)號(hào)時(shí),則在宏調(diào)用中,實(shí)參也應(yīng)為標(biāo)號(hào),且要求實(shí)參是唯一的。如果宏定義中有自己的標(biāo)號(hào),則在宏調(diào)用時(shí),匯編程序自動(dòng)地把標(biāo)號(hào)變成唯一的標(biāo)號(hào)。
??? 2、7 其他
??? (1) 替換名 ALTNAME
??? 功能: 這一偽指令用來(lái)自定義名字,以替換源程序中原來(lái)的保留字,替換的保留字均可等效地用于子程序中。
??? 格式: ALTNAME? 保留字? 自定義名
??? 注意: 自定義名與保留字之間首字符必須相同。?
??? (2) 附加文件的鏈結(jié) INCLUDE
??? 功能: 利用此偽指令可將一個(gè)源文件插入到當(dāng)前源文件中一起匯編,最終成為一個(gè)完整的源程序。
??? 格式: INCLUDE? [ 驅(qū)動(dòng)器名: ]? [ 路徑名 ]? 文件名
??? 注意:1、文件名中若沒(méi)有擴(kuò)展名,則系統(tǒng)默認(rèn)是。ASM(該文件必須是能打開(kāi)的)。
???????? 2、被插入的源程序中不能包含END偽指令,否則匯編會(huì)停止運(yùn)行。被鏈接文件的每一行,在程序清單中以“I“開(kāi)頭。
???????? 3、鏈接偽指令可有8級(jí)嵌套, 若要求嵌套的多, 則要修改 DOS 中的
CONFIG。SYS文件的FILES參數(shù)。
??? 3 宏匯編運(yùn)行
??? 3、1 系統(tǒng)運(yùn)行環(huán)境
??? ASM-51宏匯編要在IBM-PC及其兼容機(jī)上運(yùn)行(至少128K字節(jié)的RAM);具有一個(gè)軟驅(qū)動(dòng)器或硬驅(qū)動(dòng)器,采用ANSI標(biāo)準(zhǔn)終端(包括鍵盤(pán),顯示控制器,打印機(jī),至少一個(gè)RS-232異步通訊接口)。軟件有PC-DOS,MS-DOS 2。0 以上版本,ASM_51系統(tǒng)。
??? 3、2 宏匯編程序的運(yùn)行
??? 以 8051 宏匯編為例,在DOS系統(tǒng)的提示符下鍵入
??? A> ASM51? 文件名。ASM
等錯(cuò)誤的個(gè)數(shù)出現(xiàn)后 ,鍵入
??? 4 匯編的使用
??? 使用ASM-51宏匯編是將8051源程序匯編生成列表輸出文件和目標(biāo)代碼文件,供模擬/調(diào)試時(shí)使用。我們使用的宏匯編完全采用Inter標(biāo)準(zhǔn)助記符和行格式,因此在編寫(xiě)源程序時(shí),可以使用宏匯編中的偽指令, 以增加源程序的運(yùn)行速度和可讀性。也可以直接用 Inter 標(biāo)準(zhǔn)助記符來(lái)編寫(xiě)源程序。再經(jīng)過(guò)ASM-51宏匯編進(jìn)行匯編,便可得到列表輸出文件和目標(biāo)代碼文件。
??? 匯編的格式如下:
??? > ASM51? 文件名。ASM? [ 可選項(xiàng) ]
??? 其中可選項(xiàng)為: /L, /H, /S, /P, /N
??? /L 表示源程序匯編后不生成列表冊(cè)輸出文件(.LST),只顯示在屏幕上。
??? /H 表示源程序匯編后不生成目標(biāo)代碼文件(.HEX)。
??? /S 表示源程序匯編后不生成符號(hào)表。
??? /P 表示源程序匯編后生成符號(hào)表。
??? /N 表示源程序匯編后,程序是連續(xù)的顯示。
??? 如果沒(méi)有選擇項(xiàng),則表示產(chǎn)生列表輸出文件和目標(biāo)代碼文件,且在LST文件后面列出符號(hào)表。 生成的目標(biāo)代碼便可以進(jìn)行模擬/調(diào)試,如果在模擬/調(diào)試中發(fā)現(xiàn)錯(cuò)誤,則源程序要經(jīng)過(guò)修改,重新匯編,然后再進(jìn)行模擬/調(diào)試,直到完全正確。
??? 若程序匯編過(guò)程中有錯(cuò)誤,則給出出錯(cuò)信息(出錯(cuò)信息見(jiàn)附錄)。 生成的目標(biāo)代碼可以進(jìn)行模擬/調(diào)試/燒寫(xiě)。?
?????? 附錄??? ASM-51 匯編出錯(cuò)信息表
1? Address Out of Range 一個(gè)被計(jì)值的目標(biāo)地址超出了當(dāng)前語(yǔ)句的范圍。
2? Badly Formed Argument 數(shù)字規(guī)定的類(lèi)型中有非法數(shù)字存在。
3? Illefal Equale 有不允許的類(lèi)型約定。
4? Label Name Conflicts With Symbol Name 在程序中有兩個(gè)符號(hào)相同。
5? Label Address Changed On Pass 2。 源程序在此錯(cuò)誤之前,還有一些錯(cuò)誤。
6? Missing Argument in Expression 表達(dá)式中算術(shù)運(yùn)算符后面沒(méi)有操作數(shù)。
7? Missing END Statrment 匯編的源程序結(jié)尾未發(fā)現(xiàn)END語(yǔ)句。
8? Multiply Defined Label 源程序中定義了兩個(gè)標(biāo)號(hào)。
9? Unbalanced Parentheses 表達(dá)式中多余或缺少括號(hào)。
10 Undefined Symbol 語(yǔ)句中的符號(hào)名可能拼錯(cuò)或未被定義。
11 Unrecognized Statemen or Undefined Argument 未定義參數(shù)的指令或代碼。
12 Value Out of Range 有一個(gè)非法的值來(lái)說(shuō)明一個(gè)有著可能值限制的語(yǔ)句。??
評(píng)論
查看更多