1. gzyueqian
      18078865874
      首頁 > 新聞中心 > > 正文

      匯編程序輸入與輸出文件格式

      更新時間: 2007-07-20 13:48:30來源: 粵嵌教育瀏覽量:1065

        一、源文件

        源文件是由文字編緝器編寫的由匯編指令和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è)備在打印時反長行切斷,或則分成兩行。

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中国人手机在线观看 | 亚洲第一页在线视频 | 亚洲综合色区中文字幕首页 | 亚洲国产AV网址 | 亚洲区国产精品高清 | 真实的国产乱××××在线91 |