?? masm3.htm
字號:
<i>
<p align="JUSTIFY"> 013A EA MOV A,R2</p>
<p align="JUSTIFY"> 013B E502 MOV A,COUNT</p>
</i></font><font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY"></p>
</font><font face="宋體" lang="ZH-CN" size=3></font><b><font face="宋體" lang="ZH-CN">九、DB</font></b><b><font face="宋體" lang="ZH-CN">
</font></b><b><font face="宋體" lang="ZH-CN">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>DB偽指令用于定義一個連續的存儲區,給該存儲區的存儲單元賦值。該偽指令的參數即為存儲單元的值,在表達式中對變元個數沒有限制,只要此條偽指令能容納在源程序的一行內,其格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>標號:</font><font face="Arial" size=3>
DB </font><font face="宋體" lang="ZH-CN" size=3>表達式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>只要表達式不是字符串,每一表達式值都被賦給一個字節。計算表達式值時按16位處理,但其結果只取低8位,若多個表達式出現在一個DB偽指令中,它們必須以逗號分開。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>表達式中有字符串時,以單引號“</font><font face="Arial" size=3>'</font><font face="宋體" lang="ZH-CN" size=3>”作分隔符,每個字符占一個字節,字符串不加改變地被存在各字節中,并不將小寫字母轉換成大寫字母。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>例如:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> <i>DB 00H 01H 03H 46H</i></p>
<i>
<p align="JUSTIFY"> DB 'This is a demo!'</p>
</i></font><b>
<p align="JUSTIFY"> <font face="宋體" lang="ZH-CN"> </font><font face="宋體" lang="ZH-CN">十、</font><font face="Arial">DW</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> DW</font><font face="宋體" lang="ZH-CN" size=3>為以字節為單元(十六位二進制)來給一個的存儲區賦值,其格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>標號:</font><font face="Arial" size=3>
DW </font><font face="宋體" lang="ZH-CN" size=3>表達式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>例如:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> <i>0000 3035 D46B DW 12341,54379,10110100101110B</i></p>
<i>
<p align="JUSTIFY"> 0004 2D2E</p>
<p align="JUSTIFY"> 0006 4344 4243 DW 'ABCD','BC','A'</p>
<p align="JUSTIFY"> 000A 0041</p>
<p align="JUSTIFY"> 000C 2868 02E8 DW 456*375h,83+295h,'YZ',72h-456</p>
<p align="JUSTIFY"> 0010 595A FEAA</p>
</i></font><b>
<p align="JUSTIFY"> <font face="宋體" lang="ZH-CN"> </font><font face="宋體" lang="ZH-CN">十一、</font><font face="Arial">DS</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋體" lang="ZH-CN" size=3>為定義存儲內容的偽指令,用它定義一個存儲區,并用指定的參數填滿該存儲區。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋體" lang="ZH-CN" size=3>偽指令包含兩個變元,第一個變元定義了存儲區的長度的字節數,在匯編時,匯編程序將跳過這些單元把其它指令匯編在這些字節之后,因此在使用DS偽指令時第一個變元不可活力第二個變元表示在這些單元中真入什么值,第二個變元可以活力活力時這些字節將不處理。下例中</font><font face="Arial" size=3>0173</font><font face="宋體" lang="ZH-CN" size=3>處有一條</font><font face="Arial" size=3>DS
9</font><font face="宋體" lang="ZH-CN" size=3>,則空出</font><font face="Arial" size=3>9</font><font face="宋體" lang="ZH-CN" size=3>個字節,下一第指令被匯編到</font><font face="Arial" size=3>017C</font><font face="宋體" lang="ZH-CN" size=3>處;在</font><font face="Arial" size=3>017C</font><font face="宋體" lang="ZH-CN" size=3>處空出</font><font face="Arial" size=3>1BH</font><font face="宋體" lang="ZH-CN" size=3>個單元,在這些字節中被</font><font face="Arial" size=3>27H</font><font face="宋體" lang="ZH-CN" size=3>所填充。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋體" lang="ZH-CN" size=3>指令的格式如下:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>標號:</font><font face="Arial" size=3>
DS </font><font face="宋體" lang="ZH-CN" size=3>表達式1,表達式2</font></p>
<font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY">表達式1定義了存儲區的長度(以字節為單位)。這個變元不能省略。表達式2是可選擇的,它的值低8位用以填入所定義的存儲區。</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>若省略則這部分存儲單元不處理。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>例:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> 0000 04 INC A</p>
<p align="JUSTIFY"> 0001 DS 9</p>
<p align="JUSTIFY"> 000A 04 INC A</p>
<p align="JUSTIFY"> 000B DS 1BH,27H</p>
<p align="JUSTIFY"> 0026 04 INC A</p>
</font></i><b>
<p align="JUSTIFY"> <font face="宋體" lang="ZH-CN"> </font><font face="宋體" lang="ZH-CN">十二、</font><font face="Arial">INCLUDE</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令用于鏈接源文件,即將一個源文件插入到另一個源文件中。它有一個參數,指出將要插入的文件名,該文件名中可包括驅動器名和路徑名。若文件沒有擴展名,則默認為是ASM。但待插入的文件必須是可以打開的。若文件打開操作失敗,則產生致命錯誤,匯編將停止運行。反之,匯編程序將文件內容讀入并按源代碼處理。當遇到文件結速符時,匯編程序返回到</font><font face="Arial" size=3>INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令處繼續身下處理源程序。被插入的文件在程序清單中以“I”開頭。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>本宏匯編版本支持級嵌套,可在程序中用</font><font face="Arial" size=3>INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令插入任意多個文件,但是,在一般情況下DOS允許打開的文件數量是有限的,如果用戶需要打開較多的文件,則必須在CONFIG.SYS文件中加入FILES=4</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>或更多的值,若超過8級嵌套或打開的文件太多,則產生致命錯誤,匯編中止運行。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令提供了模塊化程序設計手段,在匯編程序處理主程序時,模塊被插入,盡管這不等價于鏈接和裝配可重定位的目標模塊,但它具有類似的功能,被插入的源文件中不應該包含END偽指令,否則,匯編就會提前停止運行,END偽指令只能出現在主程序中。此外,在主程序進行匯編前所有附加的源文件必須通過匯編,產生相應的HEX及LST文件,由于附加的文件沒有END偽指令,因此,附加文件匯編時,匯編程序將顯示:“沒有結束語句”的錯誤,但并不影響與主程序的鏈接。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>下面是一個使用</font><font face="Arial" size=3>INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令的例子,其主程序的源文件MAIN.ASM為:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> ;MAIN.ASM</p>
<p align="JUSTIFY"> ORG 27H</p>
<p align="JUSTIFY">START:</p>
<p align="JUSTIFY"> CLR A</p>
<p align="JUSTIFY"> MOV R3,A</p>
<p align="JUSTIFY"> INCLUDE MOD1</p>
<p align="JUSTIFY"> INC R5</p>
<p align="JUSTIFY"> INCLUDE MOD2.ASM</p>
<p align="JUSTIFY"> DEC R3</p>
<p align="JUSTIFY"> END START</p>
</font></i>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>主程序為帶有END偽指令的完整的源文件。程序中有兩</font><font face="Arial" size=3>INCLUDE</font><font face="宋體" lang="ZH-CN" size=3>偽指令,分別將兩附加的文件MOD1.ASM及MOD2.ASM鏈接到主程序中。以下是這兩個文件。</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> ;MOD1.ASM</p>
<p align="JUSTIFY"> MOV R2,#31H</p>
<p align="JUSTIFY"> MOV R5,#18H</p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> ;MOD2.ASM</p>
<p align="JUSTIFY"> MOV R6,#47H</p>
<p align="JUSTIFY"> ANL A,#07H</p>
<p align="JUSTIFY"> MOV R1,A</p>
</font></i><font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY">注意MOD1.ASM及MOD2.ASM均沒有END指令。</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>在進行匯編時必須先對MOD1.ASM和MOD2.ASM進行匯編,然后在匯編MAIN.ASM,由于上兩個文件沒有END偽指令,所以在匯編時會出現錯誤提示,不用管它,繼續下面的工作,就可以得到正確的結果。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>以下是形成的列表文件:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 1</p>
<p align="JUSTIFY"> ;MOD2.ASM</p>
<p align="JUSTIFY"> MOV R6,#47H</p>
<p align="JUSTIFY"> ANL A,#07H</p>
<p align="JUSTIFY"> MOV R1,A</p>
<p align="JUSTIFY"> 08-27-96</p>
<p align="JUSTIFY"> ;MAIN.ASM</p>
<p align="JUSTIFY"> 0027 ORG 27H</p>
<p align="JUSTIFY"> START:</p>
<p align="JUSTIFY"> 0027 E4 CLR A</p>
<p align="JUSTIFY"> 0028 FB MOV R3,A</p>
<p align="JUSTIFY">I INCLUDE MOD1</p>
<p align="JUSTIFY">I ;MOD1.ASM</p>
<p align="JUSTIFY">I0029 7A31 MOV R2,#31H</p>
<p align="JUSTIFY">I002B 7D18 MOV R5,#18H</p>
<p align="JUSTIFY">I</p>
<p align="JUSTIFY"> 002D 0D INC R5</p>
<p align="JUSTIFY">I INCLUDE MOD2.ASM</p>
<p align="JUSTIFY">I ;MOD2.ASM</p>
<p align="JUSTIFY">I002E 7E47 MOV R6,#47H</p>
<p align="JUSTIFY">I0030 5407 ANL A,#07H</p>
<p align="JUSTIFY">I0032 F9 MOV R1,A</p>
<p align="JUSTIFY"> 0033 1B DEC R3</p>
<p align="JUSTIFY"> 0027 END START</p>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 2</p>
<p align="JUSTIFY"> 08-27-96</p>
<p align="JUSTIFY"> ;%T Symbol Name Type Value</p>
<p align="JUSTIFY"> START . . . . . . . . . . . . . L 0027</p>
<p align="JUSTIFY"> ;%Z</p>
<p align="JUSTIFY"> 00 Errors (0000)</p>
</font></i><b><font face="宋體" lang="ZH-CN"> <a name="_Toc416236569">十三、TITL</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>TITLE偽指令用于在列表文件頁頭建立一個標題,其格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>$TITLE</font><font face="Arial" size=3>
</font><font face="宋體" lang="ZH-CN" size=3>標題行</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>這里標量行就是將出現在頁頭的標量與通常的字符串定義不同。這里標量行不加引號。匯編從$TITLE之后的第一個可打印字符開始,到回車符之間的字符串作為標量標量的最大長度是6</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>個字符,基標量行省略,則標題行為空行。若TITLE偽指令在一頁,它說明的標量行包含在本頁,否則,標題將出現在下頁頁頭。</font></p>
<b><font face="宋體" lang="ZH-CN"> <a name="_Toc416236570">十四、PAGE</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>PAGE偽指令用于形成新的一中定義一面的行數。其格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>$PAGE</font><font face="Arial" size=3>
</font><font face="宋體" lang="ZH-CN" size=3>表達式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>若表達</font><font face="Arial" size=3>
</font><font face="宋體" lang="ZH-CN" size=3>式缺省則開始新的一頁,若有表達式,則每頁行數重新定義。匯編開始時頁長為66行。一頁中除出頁外,剩余55行用于打印源程序,這一格式適用于標準打印紙。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>如果變元值小于66,頁內可打印的源代碼行將相應減少。頁長最小值為12。若小于12時,每頁內除頁上只打印一行源程序。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>頁長變元是16位字節,因而每頁最長可定義到65535行,這時分頁打印變為連續打印,在屏幕顯示程序清單或在卷筒紙上打印程序清單時,常常使用連續打印,如果在啟動匯編時用</font><font face="Arial" size=3>/N</font><font face="宋體" lang="ZH-CN" size=3>選項,頁長就是65535。</font></p>
<b><font face="宋體" lang="ZH-CN"> <a name="_Toc416236571">十五、LIST與NOLIST</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>它們的格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>$LIST</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>$NOLIST</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>LIST偽指令使匯編時主生程序清單,但即使不用該指令,匯編也會自動產生清單。但如果使用了NOLIST偽指令后需要繼續主生清單則必須使用LIST偽指令。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>NOLIST偽指令使匯編時不產生清單,所有包含此偽指令及在這條偽指令之后的語句都不進入列表文件。當不需要任何列表文件,并且不需要顯示程序清單時,可以在啟動匯編時不加.L附加項,且在源代碼的第一行加上NOLIST指令。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>使用NOLIST偽指令與附加項</font><font face="Arial" size=3>/L</font><font face="宋體" lang="ZH-CN" size=3>不同之處是NOLIST偽指令可加在源程序中,與LIST偽指令配合使用,使源程序中某些部分不產生清單。而不加附加項</font><font face="Arial" size=3>/L</font><font face="宋體" lang="ZH-CN" size=3>則不產生任何程序清單。不過,不管有無$NOLIST偽指令,程序在匯編時檢查到的錯誤都將在屏幕上顯示出錯的源代碼行及錯誤信息</font></p>
<p align="JUSTIFY"><b><font face="宋體" lang="ZH-CN"><a name="_Toc416236572">十六、NOCODE</a>
</font></b></p>
<b><font face="宋體" lang="ZH-CN">
<p></p>
</font></b>
</ol>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>其格式為</font><font face="Arial" size=3>
</font><font face="宋體" lang="ZH-CN" size=3>$NOCODE</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>NOCODE偽指令使得在匯編時,條件匯編程序結構中那些真值為假的條件不產生清單。有關條件匯編結構在下面介紹。如果沒有這條偽指令,匯編將主生所有條件下的清單,不論其真值是否為真。但是假的條件,不產生目標碼。而NOCODE偽指令使匯編清單中只列出那些由匯編程序用到的部分,因此,當使用NOCODE偽指令時,程序清單與源程序并非逐行對應。</font></p>
<b><font face="黑體" lang="ZH-CN" size=5>
<p align="center"><a href="dpjjx.htm"><img src="back1.gif" width="43" height="55" border="0"></a>
</font></b>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -