當前位置:首頁 > 單片機 > 單片機
[導讀]ASM-51 宏匯編主要用來開發(fā)Inter8051系列單片機,它具有宏處理,數(shù)據(jù)處理,列表處理和條件處理等多種功能。源程序的編寫完全采用 Inter標準助記符和行格式。在編寫程序過程中,可借助于文本編輯(Windows的記事本)或

ASM-51 宏匯編主要用來開發(fā)Inter8051系列單片機,它具有宏處理,數(shù)據(jù)處理,列表處理和條件處理等多種功能。源程序的編寫完全采用 Inter標準助記符和行格式。在編寫程序過程中,可借助于文本編輯(Windows的記事本)或文字處理軟件Word等編輯, 經(jīng)ASM-51匯編后生成列表輸出文件(.LST)和目標代碼文件(.HEX)。 此目標代碼文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051進行模擬/調(diào)試,或直接用于硬件仿真器上運行。當然,這也是要燒寫到單片機ROM中的代碼。

    1、 宏匯編語言的基本語法

    1、1  宏匯編的特點

    ASM-51宏匯編完全支持Inter助記符的匯編語言,它含有宏語句,英文大小寫字母,變量名,標號等不受限制,有二,十,十六進制和串參數(shù)類型,有匯編控制指令和多層條件語句,程序邏輯分段, 還有模塊化程序設計的連接功能,匯編速度快等特點。

    1、2 匯編處理過程

    (1) 用行編輯EDLIN或文字處理軟件WS或全屏幕編輯軟件PE等,編輯宏匯編

語言源程序,它的文件擴展名為。ASM。

    (2) 用ASM-51宏匯編程序?qū)ι鲜鲈闯绦蛭募M行匯編,產(chǎn)生擴展名為.LST的列表輸出文件和擴展名為.HEX的目標代碼文件(.HEX)。 列表輸出文件包含源程序語句所匯編成的代碼,以及有關的地址,語句和符號表等。 目標代碼文件包含源程序語句所匯編成的代碼, 不包含任何符號信息或助記符。 進行模擬/調(diào)試,或直接用于硬件仿真器上運行。

    1、3 語句

    匯編語言可分為兩類語句:指令性語句和指示性語句。

    (1)指令性語句

    這一類語句是指在匯編過程中能生成指令代碼的語句(如 MOV ,DEC等)。其格式為:

     [標號:] [指令助記符] [操作數(shù)] [;注釋]

    其中方括號[  ]中為選擇項。下同。

    (2)指示性語句

    這一類語句即通常所說的偽指令,它指示匯編程序后面的指示性語句如何產(chǎn)生代碼。

    ASM-51宏匯編完全支持Inter助記符的匯編語言,因此匯編程序的格式,指令完全與8051匯編語言一樣,這里不再介紹它們的指令系統(tǒng)。

    1、4 常量與數(shù)值運算

    (1) 常量及其表示

    常量,就是在匯編時已經(jīng)確定的值。 在匯編語言中,常量主要用作指令性語句中的直接操作數(shù),也可用于存儲器操作的組成部分(如位移量),或者為偽指令中的變量輸初值。

   為便于程序設計,常量有多種表示形式:二、十、十六進制數(shù)和字符串等,它們的格式各不相同,并采用不同的基數(shù)標記加以區(qū)分。表--1列出其格式。 

  表--1

數(shù)據(jù)形式     格   式     取值范圍      例 如        備   注

 2進制      ********B      0,1        10011100B

10進制       ******      0,1,2...9    45723       缺省基數(shù)標記

16進制       ****H       0,1...E,F(xiàn)    0CDE3H      最前面一個字符應是0--9

ASCII        '**'         ASCII        'AD'       只有DB命令中使用

 

    常量以數(shù)值形式直接寫在匯編語言的語句中稱為字面常量, 若預先為它定義一個符號名,然后在語句中用符號名來表示該常量稱符號常量。使用符號常量的優(yōu)點可改善程序的可讀性,它的定義需要使用偽操作命令"EQU"或“=“。

    (2) 數(shù)值運算

    宏匯編中,所有參數(shù)值均被認為是整數(shù),并以16位的形式存放,表示的范圍是0---65535,所有算術操作均對整數(shù)以補碼形式運算。

    (1) 基本運算

    匯編語言對常量允許進行算術運算,邏輯運算,分離運算等三種類型的運算。如表--2所示。 

 表--2                 基本運算

  運  算    操   作       含  義           以ADD為例

    算        +           加操作         ADD  A,R1+36

                -           減操作         ADD  A,R1-2EH

                *           乘操作         ADD  A,R1*0E3H

    術        /           除操作         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

 

說明:   R1為符號常量。

    (2) 綜合運算

    綜合運算規(guī)則 1: 計算表達式時,所有的運算全部從左到右順序進行,遇到操作數(shù)就進行運算,不考慮優(yōu)先關系,括號有助于視覺理解,但不改變表達式的?計算順序。

    例如:     R1 SET NOT(0C5FH OR 000CH)

              其結(jié)果應為 0F3ACH。

    綜合運算規(guī)則 2: 當兩個操作數(shù)之間沒有參數(shù)相隔時, 第二個操作符優(yōu)先于第一個操作符計算。

    例如:    R1 SET NOT 10011010B

             其結(jié)果應為 65H。

    1、5 程序分段

    8051系列的處理器的結(jié)構, 把內(nèi)存分成五個獨立的內(nèi)存段, 即代碼段(段名CSEG),數(shù)據(jù)段(段名DSEG), 外部段(段名XSEG), 功能段(段名FSEG)和位段(段名BSEG)等。 各個段在源程序中的次序可以任意,段的數(shù)目可以根據(jù)需要確定,原則上不受限制。程序中的所有段都必須用段名開頭,段結(jié)束語句ENDS結(jié)束。

    1、6 源文件

    源文件是由匯編語言代碼和匯編程序指令組成的 ASCII 字符文件, 擴展名為。ASM。源文件的每一語句行,最多有四個域。每一行的長度不超過80個字符, 且以“回車“鍵結(jié)束。

    1、7 列表輸出文件和目標代碼文件

    (1) 目標代碼文件(.HEX)

    目標代碼文件(.HEX)是ASCII文件,它只包含由各種程序語句所生成的代碼,而不包含任何信息或助記符。 該文件是能夠在處理器上運行的實際機器指令碼。

    目標代碼文件格式如下:

        :cc      aaaa       tt    dd   aa   dd     ss     <CR>

        計數(shù)器          數(shù)據(jù)類型      記錄地址            回車

                記錄地址             代碼的字節(jié)    和校驗

    目標代碼文件(.HEX)的每一行以一個冒號開始, 后面跟著的數(shù)字和符號分別表示十六進制數(shù)據(jù)的計數(shù)器(cc),記錄第一個數(shù)據(jù)字節(jié)的16位地址(aaaa),目標記錄的數(shù)據(jù)類型(tt),代碼的實際字節(jié)(dd),計數(shù)器從第一個數(shù)據(jù)字節(jié)到最后的所有字節(jié)值累加和的相反數(shù)即和校驗(ss)等等。

    (2)列表輸出文件(.LST)

    列表輸出文件也是個ASCII文件,它由源程序和目標代碼文件組成, 可作為程序文檔也可被打印。

    列表輸出文件是分頁顯示,打印的,其長度由缺省值或偽指令$PAGE決定。 每頁一開始指出匯編程序的類型,版本以及頁號等。

    2、 偽操作指令

    匯編語言中的指示性語句(偽指令),不象指令性語句會產(chǎn)生目標代碼, 它主要是用來“控制指揮“匯編程序如何把指令性語句翻譯成目標代碼。除本身偽指令申請分配一部分存貯空間作數(shù)據(jù)區(qū)和堆棧區(qū)外,不產(chǎn)生任何目標代碼。

    按照它們的功能,大致分成七類: 符號定義偽操作,段定義偽操作,數(shù)據(jù)定義崐偽操作,列表偽操作,條件偽操作,宏處理偽操作以及其它操作等。如表--3所示。

 

    表--3        偽操作指令

序號     分    類              偽  操  作  指  令

 1    符號定義偽操作       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 符號定義偽操作

    符號定義偽操作及其格式:      符號名  符號定義名  常量或表達式

    其中符號定義名可以為EQU,=,DATA,BYTE,WORD,BIT,SET等。下面就是這些符

號定義偽操作的用法及說明。如表--4所示。

 

    表--4        符號定義偽操作

符號定義名          用          法                  說        明

  EQU         為常量,符號名等定義符號化常量名    符號名不能重名定義

   =          為常量,符號名等定義符號化常量名    符號名不能重名定義

  DATA        用來為一個字節(jié)類型的符號定值       符號名不能重名定義

  BYTE        用來為一個字節(jié)類型的符號定值       符號名不能重名定義

  WORD        用來為一個字類型的符號定值         符號名不能重名定義

                                                 8051中沒有字操作

  BIT         用來定義一個字位類型

  SET         用來定義整數(shù)類型的符號名           符號名可重名定義

 

    DATA與BYTE的區(qū)別: DATA與BYTE是相類似的偽指令。 當程序運行到DATA偽指令定義的符號名時,該符號名將被顯示;而由BYTE定義的符號名不被顯示。

    2、2 段定義偽操作

    (1)  ORG  用于設置或改變程序計數(shù)器的值。

    其格式為:            ORG    常數(shù)或表達式

    例如:  ORG  0008H

            ORG  $+5

    其中$表示程序計數(shù)器的當前值。

    (2)  END  表示源代碼結(jié)束。

    其格式為:            END  常數(shù)或表達式

    匯編程序遇到END語句即停止運行。 若程序中沒有END,則在匯編源程序時顯出錯

    (3)  8051系列的處理器把內(nèi)存結(jié)構分成五個段,代碼段CSEG,數(shù)據(jù)段DSEG,外部段XSEG,功能段FSEG和位段BSEG等,其用法及區(qū)別如 表--5所示。

    在匯編以上各段所定義的符號時,系統(tǒng)根據(jù)符號所在不同段,賦與不同類型的字母,如表--6所示。

    2、3  數(shù)據(jù)定義偽操作

    數(shù)據(jù)定義偽操作格式:

         [ 標號: ]   數(shù)據(jù)定義名  [ 表達式1,表達式2,。。。 ]

    其中數(shù)據(jù)定義名可為DB,DW,DS等。

    如表--7所示,數(shù)據(jù)定義偽操作的含義及說明。

 

    表--5            段定義偽操作

  段                    用      法      及      區(qū)      別

代碼段(CSEG)   包含由處理器所執(zhí)行的程序。段名可缺省。有目標代碼生成。

數(shù)據(jù)段(DESG)   由內(nèi)部工作寄存器的處理器的RAM組成。用來對程序使用的數(shù)據(jù)地址賦符號名,大多以ORG,DATA,BYTE,WORD,EDNS等組成。     無目標碼生成。

外部段(XSEG)   由外部工作寄存區(qū)和RAM組成。使用方法同數(shù)據(jù)段。無目標碼生成。

功能段(FSEG)   由特殊寄存器位置組成(如:輸入/輸出部件,計時器,中斷控制和連續(xù)的寄存器部件接口等)。無目標代碼生成。

位  段(BSEG)   由一些獨立的位組成,可以用布爾函數(shù)實現(xiàn)。 該段地址被解釋為位地址。無目標代碼生成。

 

    表--6              程序分段的類型符號

   段           標號(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

 

    說明:   (1)在不同的段中類型符號不同;

            (2)字節(jié)型操作數(shù)(Byte)一般通過DATA指令賦給符號; 字型操作數(shù)

一般通過WORD指令賦給符號;

            (3)如果各段中用BYTE賦值,則在各段中符號全以S表示;在SIM51模

擬/調(diào)試中的符號區(qū)顯示功能中,對BYTE賦值的將被跳過。

            (4)在各段中,位類型可以用BIT指令賦給。

 

   表--7           數(shù)據(jù)定義偽操作

數(shù)據(jù)定義名        含          義                說                明

    DB    用于定義一個字節(jié)包含的值      表達式不是字符串時,每個表達式賦給一個字節(jié),是字符串時,用單引號 “ ' “ 作為分隔符。

    DW    用于定義一個字(16位)    每個表達式占16位。 如果表達式中的存貯內(nèi)容為字符串,只取最后兩個字符。若字符串只有一個字符,高字節(jié)置“0“。

    DS      定義一個存貯區(qū)     通常用在代碼段中,作為程序的一部分。若用在數(shù)據(jù)段,外部段,則作為位置標志使用。

        表--8              列表偽操作

   偽指令          含義及格式                    說              明

   $TITLE    給源程序指定一個標題            標題不加 “  “,其最大長度

             格式: $TITLE [標題行]           60個字符。若標題行省略, 原來定義的標題行作廢。

   $SUBTTL  給源程序指定一個副標題           副標題不加 “  “,其最大長

            格式: $SUBTTL [副標題行]         度60字符。若副標題行省略,原來定義的副標題行作廢。

   $PAGE    用于形成或定義新的一頁或行數(shù)     匯編時頁長為66行(適合于格式: $PAGE [表達式] 標準打印紙)。表達式最大為65535,最小為12, 表達式缺省,則從新的一頁開始。

   $LIST     使源程序匯編時,產(chǎn)生程序清單    匯編時無此指令照樣產(chǎn)生清單。

             格式: $LIST

   $NOLIST   使源程序匯編時不產(chǎn)生程序清單

             格式: $NOLIST

   $NOCODE   源程序匯編時,條件匯編程序值    沒有此指令匯編時,不論其值是為假的不產(chǎn)生清單。真、假的條件都不產(chǎn)生目標碼。

             格式: $NOCODE

    2、4  列表偽操作

    如表--8所示,列表偽操作的含義,格式及說明。

    2、5 條件偽操作

    條件偽操作格式:

           IF   表達式

               [ 程序塊1 ]

           [ ELSE ]

               [ 程序塊2 ]

           ENDIF

   當IF指令中的表達式為真時,被匯編的代碼段是程序塊1;當IF指令中的表達式為假時,被匯編的代碼段是程序塊2。 在一個條件結(jié)構中,僅有一個代碼段被匯編,其它的則被忽略。

    2、6 宏處理操作

    在源程序中,如果有一段程序需要多次使用,為使程序不重復書寫這段程序,可用宏定義把所需要重復出現(xiàn)的程序塊定義成宏指令,此后在宏指令出現(xiàn)的地方,宏匯編程序總是自動地把它們替換成相應的代碼段。

    (1) 宏指令格式

        [ 宏指令名 ]  MACRO  [形式參數(shù),。。。]

                      代碼段

                      ENDM

    在宏定義中,使用了“形式參數(shù)“,它們引用宏指令時被給出的一些名字或數(shù)值(實在參數(shù))所替換。使用形式參數(shù)給宏指令帶來了很大的靈活性。

    (2)宏調(diào)用格式

        [ 宏指令名 ]  [實在參數(shù),。。。]

    注意:1、當有兩個以上的實參數(shù)時,它們之間要用逗號,空格或列表符隔開。
      2、實參數(shù)項將對應替換宏指令中形式參數(shù)。如果形式參數(shù)為標號時,則在宏調(diào)用中,實參也應為標號,且要求實參是唯一的。如果宏定義中有自己的標號,則在宏調(diào)用時,匯編程序自動地把標號變成唯一的標號。

    2、7 其他

    (1) 替換名 ALTNAME

    功能: 這一偽指令用來自定義名字,以替換源程序中原來的保留字,替換的保留字均可等效地用于子程序中。

    格式: ALTNAME  保留字  自定義名

    注意: 自定義名與保留字之間首字符必須相同。 

    (2) 附加文件的鏈結(jié) INCLUDE

    功能: 利用此偽指令可將一個源文件插入到當前源文件中一起匯編,最終成為一個完整的源程序。

    格式: INCLUDE  [ 驅(qū)動器名: ]  [ 路徑名 ]  文件名

    注意:1、文件名中若沒有擴展名,則系統(tǒng)默認是。ASM(該文件必須是能打開的)。

         2、被插入的源程序中不能包含END偽指令,否則匯編會停止運行。被鏈接文件的每一行,在程序清單中以“I“開頭。

         3、鏈接偽指令可有8級嵌套, 若要求嵌套的多, 則要修改 DOS 中的

CONFIG。SYS文件的FILES參數(shù)。

    3 宏匯編運行

    3、1 系統(tǒng)運行環(huán)境

    ASM-51宏匯編要在IBM-PC及其兼容機上運行(至少128K字節(jié)的RAM);具有一個軟驅(qū)動器或硬驅(qū)動器,采用ANSI標準終端(包括鍵盤,顯示控制器,打印機,至少一個RS-232異步通訊接口)。軟件有PC-DOS,MS-DOS 2。0 以上版本,ASM_51系統(tǒng)。

    3、2 宏匯編程序的運行

    以 8051 宏匯編為例,在DOS系統(tǒng)的提示符下鍵入

    A> ASM51  文件名。ASM <CR>

等錯誤的個數(shù)出現(xiàn)后 ,鍵入 <CR> 變返回到DOS提示符下。8051的宏匯編與此相似。

    4 匯編的使用

    使用ASM-51宏匯編是將8051源程序匯編生成列表輸出文件和目標代碼文件,供模擬/調(diào)試時使用。我們使用的宏匯編完全采用Inter標準助記符和行格式,因此在編寫源程序時,可以使用宏匯編中的偽指令, 以增加源程序的運行速度和可讀性。也可以直接用 Inter 標準助記符來編寫源程序。再經(jīng)過ASM-51宏匯編進行匯編,便可得到列表輸出文件和目標代碼文件。

    匯編的格式如下:

    > ASM51  文件名。ASM  [ 可選項 ]

    其中可選項為: /L, /H, /S, /P, /N

    /L 表示源程序匯編后不生成列表冊輸出文件(.LST),只顯示在屏幕上。

    /H 表示源程序匯編后不生成目標代碼文件(.HEX)。

    /S 表示源程序匯編后不生成符號表。

    /P 表示源程序匯編后生成符號表。

    /N 表示源程序匯編后,程序是連續(xù)的顯示。

    如果沒有選擇項,則表示產(chǎn)生列表輸出文件和目標代碼文件,且在LST文件后面列出符號表。 生成的目標代碼便可以進行模擬/調(diào)試,如果在模擬/調(diào)試中發(fā)現(xiàn)錯誤,則源程序要經(jīng)過修改,重新匯編,然后再進行模擬/調(diào)試,直到完全正確。

    若程序匯編過程中有錯誤,則給出出錯信息(出錯信息見附錄)。 生成的目標代碼可以進行模擬/調(diào)試/燒寫。 

       附錄    ASM-51 匯編出錯信息表

1  Address Out of Range 一個被計值的目標地址超出了當前語句的范圍。

2  Badly Formed Argument 數(shù)字規(guī)定的類型中有非法數(shù)字存在。

3  Illefal Equale 有不允許的類型約定。

4  Label Name Conflicts With Symbol Name 在程序中有兩個符號相同。

5  Label Address Changed On Pass 2。 源程序在此錯誤之前,還有一些錯誤。

6  Missing Argument in Expression 表達式中算術運算符后面沒有操作數(shù)。

7  Missing END Statrment 匯編的源程序結(jié)尾未發(fā)現(xiàn)END語句。

8  Multiply Defined Label 源程序中定義了兩個標號。

9  Unbalanced Parentheses 表達式中多余或缺少括號。

10 Undefined Symbol 語句中的符號名可能拼錯或未被定義。

11 Unrecognized Statemen or Undefined Argument 未定義參數(shù)的指令或代碼。

12 Value Out of Range 有一個非法的值來說明一個有著可能值限制的語句。  

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉