ASM-51宏匯編應用指南
ASM-51 宏匯編主要用來(lái)開(kāi)發(fā)Inter8051系列單片機,它具有宏處理,數據處理,列表處理和條件處理等多種功能。源程序的編寫(xiě)完全采用 Inter標準助記符和行格式。在編寫(xiě)程序過(guò)程中,可借助于文本編輯(Windows的記事本)或文字處理軟件Word等編輯, 經(jīng)ASM-51匯編后生成列表輸出文件(.LST)和目標代碼文件(.HEX)。 此目標代碼文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051進(jìn)行模擬/調試,或直接用于硬件仿真器上運行。當然,這也是要燒寫(xiě)到單片機ROM中的代碼。
本文引用地址:http://dyxdggzs.com/article/171459.htm1、 宏匯編語(yǔ)言的基本語(yǔ)法
1、1 宏匯編的特點(diǎn)
ASM-51宏匯編完全支持Inter助記符的匯編語(yǔ)言,它含有宏語(yǔ)句,英文大小寫(xiě)字母,變量名,標號等不受限制,有二,十,十六進(jìn)制和串參數類(lèi)型,有匯編控制指令和多層條件語(yǔ)句,程序邏輯分段, 還有模塊化程序設計的連接功能,匯編速度快等特點(diǎn)。
1、2 匯編處理過(guò)程
(1) 用行編輯EDLIN或文字處理軟件WS或全屏幕編輯軟件PE等,編輯宏匯編
語(yǔ)言源程序,它的文件擴展名為。ASM。
(2) 用ASM-51宏匯編程序對上述源程序文件進(jìn)行匯編,產(chǎn)生擴展名為.LST的列表輸出文件和擴展名為.HEX的目標代碼文件(.HEX)。 列表輸出文件包含源程序語(yǔ)句所匯編成的代碼,以及有關(guān)的地址,語(yǔ)句和符號表等。 目標代碼文件包含源程序語(yǔ)句所匯編成的代碼, 不包含任何符號信息或助記符。 進(jìn)行模擬/調試,或直接用于硬件仿真器上運行。
1、3 語(yǔ)句
匯編語(yǔ)言可分為兩類(lèi)語(yǔ)句:指令性語(yǔ)句和指示性語(yǔ)句。
(1)指令性語(yǔ)句
這一類(lèi)語(yǔ)句是指在匯編過(guò)程中能生成指令代碼的語(yǔ)句(如 MOV ,DEC等)。其格式為:
[標號:] [指令助記符] [操作數] [;注釋]
其中方括號[ ]中為選擇項。下同。
(2)指示性語(yǔ)句
這一類(lèi)語(yǔ)句即通常所說(shuō)的偽指令,它指示匯編程序后面的指示性語(yǔ)句如何產(chǎn)生代碼。
ASM-51宏匯編完全支持Inter助記符的匯編語(yǔ)言,因此匯編程序的格式,指令完全與8051匯編語(yǔ)言一樣,這里不再介紹它們的指令系統。
1、4 常量與數值運算
(1) 常量及其表示
常量,就是在匯編時(shí)已經(jīng)確定的值。 在匯編語(yǔ)言中,常量主要用作指令性語(yǔ)句中的直接操作數,也可用于存儲器操作的組成部分(如位移量),或者為偽指令中的變量輸初值。
為便于程序設計,常量有多種表示形式:二、十、十六進(jìn)制數和字符串等,它們的格式各不相同,并采用不同的基數標記加以區分。表--1列出其格式。
表--1
數據形式 格 式 取值范圍 例 如 備 注
2進(jìn)制 ********B 0,1 10011100B
10進(jìn)制 ****** 0,1,2...9 45723 缺省基數標記
16進(jìn)制 ****H 0,1...E,F 0CDE3H 最前面一個(gè)字符應是0--9
ASCII '**' ASCII 'AD' 只有DB命令中使用
常量以數值形式直接寫(xiě)在匯編語(yǔ)言的語(yǔ)句中稱(chēng)為字面常量, 若預先為它定義一個(gè)符號名,然后在語(yǔ)句中用符號名來(lái)表示該常量稱(chēng)符號常量。使用符號常量的優(yōu)點(diǎn)可改善程序的可讀性,它的定義需要使用偽操作命令EQU或“=“。
(2) 數值運算
宏匯編中,所有參數值均被認為是整數,并以16位的形式存放,表示的范圍是0---65535,所有算術(shù)操作均對整數以補碼形式運算。
(1) 基本運算
匯編語(yǔ)言對常量允許進(jìn)行算術(shù)運算,邏輯運算,分離運算等三種類(lèi)型的運算。如表--2所示。
表--2 基本運算
運 算 操 作 含 義 以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 高字節分離 ADD A, HIGH 05E2H
離 LOW 低字節分離 ADD A, LOW 77F0H
說(shuō)明: R1為符號常量。
(2) 綜合運算
綜合運算規則 1: 計算表達式時(shí),所有的運算全部從左到右順序進(jìn)行,遇到操作數就進(jìn)行運算,不考慮優(yōu)先關(guān)系,括號有助于視覺(jué)理解,但不改變表達式的?計算順序。
例如: R1 SET NOT(0C5FH OR 000CH)
其結果應為 0F3ACH。
綜合運算規則 2: 當兩個(gè)操作數之間沒(méi)有參數相隔時(shí), 第二個(gè)操作符優(yōu)先于第一個(gè)操作符計算。
例如: R1 SET NOT 10011010B
其結果應為 65H。
1、5 程序分段
8051系列的處理器的結構, 把內存分成五個(gè)獨立的內存段, 即代碼段(段名CSEG),數據段(段名DSEG), 外部段(段名XSEG), 功能段(段名FSEG)和位段(段名BSEG)等。 各個(gè)段在源程序中的次序可以任意,段的數目可以根據需要確定,原則上不受限制。程序中的所有段都必須用段名開(kāi)頭,段結束語(yǔ)句ENDS結束。
1、6 源文件
源文件是由匯編語(yǔ)言代碼和匯編程序指令組成的 ASCII 字符文件, 擴展名為。ASM。源文件的每一語(yǔ)句行,最多有四個(gè)域。每一行的長(cháng)度不超過(guò)80個(gè)字符, 且以“回車(chē)“鍵結束。
1、7 列表輸出文件和目標代碼文件
(1) 目標代碼文件(.HEX)
目標代碼文件(.HEX)是ASCII文件,它只包含由各種程序語(yǔ)句所生成的代碼,而不包含任何信息或助記符。 該文件是能夠在處理器上運行的實(shí)際機器指令碼。
目標代碼文件格式如下:
:cc aaaa tt dd aa dd ss CR>
計數器 數據類(lèi)型 記錄地址 回車(chē)
記錄地址 代碼的字節 和校驗
目標代碼文件(.HEX)的每一行以一個(gè)冒號開(kāi)始, 后面跟著(zhù)的數字和符號分別表示十六進(jìn)制數據的計數器(cc),記錄第一個(gè)數據字節的16位地址(aaaa),目標記錄的數據類(lèi)型(tt),代碼的實(shí)際字節(dd),計數器從第一個(gè)數據字節到最后的所有字節值累加和的相反數即和校驗(ss)等等。
(2)列表輸出文件(.LST)
列表輸出文件也是個(gè)ASCII文件,它由源程序和目標代碼文件組成, 可作為程序文檔也可被打印。
列表輸出文件是分頁(yè)顯示,打印的,其長(cháng)度由缺省值或偽指令$PAGE決定。 每頁(yè)一開(kāi)始指出匯編程序的類(lèi)型,版本以及頁(yè)號等。
2、 偽操作指令
匯編語(yǔ)言中的指示性語(yǔ)句(偽指令),不象指令性語(yǔ)句會(huì )產(chǎn)生目標代碼, 它主要是用來(lái)“控制指揮“匯編程序如何把指令性語(yǔ)句翻譯成目標代碼。除本身偽指令申請分配一部分存貯空間作數據區和堆棧區外,不產(chǎn)生任何目標代碼。
按照它們的功能,大致分成七類(lèi): 符號定義偽操作,段定義偽操作,數據定義偽操作,列表偽操作,條件偽操作,宏處理偽操作以及其它操作等。如表--3所示。
表--3 偽操作指令
序號 分 類(lèi) 偽 操 作 指 令
1 符號定義偽操作 EQU,=,DATA,BYTE,WORD,BIT,SET
2 段定義偽操作 ORG,END,CSEG,DSEG,XSEG,FSEG,ENDS
3 數據定義偽操作 DB,DW,DS
4 列表偽操作 $TITLE,$SUBTTL,$PAGE,$LIST,$NOLIST,$NOCODE
5 條件偽操作 IF,ELSE,ENDIF
6 宏處理偽操作 MACRO,ENDM
7 其 它 ALTNAME,INCLUDE
評論