?? masm3.htm
字號:
<html>
<head>
<title>匯編指令的格式(偽指令)</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#CCCCCC">
<b>
<p align="center"><font face="黑體" lang="ZH-CN" size=5>第四節</font><font face="Arial" size=5>
</font><font face="黑體" lang="ZH-CN" size=5>偽</font><font face="Arial" size=5>
</font><font face="黑體" lang="ZH-CN" size=5>指</font><font face="Arial" size=5>
</font><font face="黑體" lang="ZH-CN" size=5>令</font></p>
<font face="黑體" lang="ZH-CN" size=5>
<p></p>
</font></b><font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY"></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>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>不同匯編程序允許的偽指令并不相同,以下所述的偽指令僅適用于MASM51系統,但一些基本的偽指令在大部份匯編程序中都能使用,當使用其它的匯編程序版本時,只要注意一下它們之間的區別就可以了。MASM51中可用的偽指令有:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ORG </font><font face="宋體" lang="ZH-CN" size=3>設置程序起始地址</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> END </font><font face="宋體" lang="ZH-CN" size=3>標志源代碼結束</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> EQU </font><font face="宋體" lang="ZH-CN" size=3>定義常數</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> SET </font><font face="宋體" lang="ZH-CN" size=3>定義整型數</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DATA </font><font face="宋體" lang="ZH-CN" size=3>給字節類型符號定值</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> BYTE </font><font face="宋體" lang="ZH-CN" size=3>給字節類型符號定值</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> WROD </font><font face="宋體" lang="ZH-CN" size=3>給字類型符號定值</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> BIT </font><font face="宋體" lang="ZH-CN" size=3>給位地址取名</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ALTNAME </font><font face="宋體" lang="ZH-CN" size=3>用自定義名取代保留字</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DB </font><font face="宋體" lang="ZH-CN" size=3>給一塊連續的存儲區裝載字節型數據</font></p>
<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> DS </font><font face="宋體" lang="ZH-CN" size=3>預留一個連續的存儲區或裝入指定字節。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> INCLUDE </font><font face="宋體" lang="ZH-CN" size=3>將一個源文件插入程序中</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> TITLE </font><font face="宋體" lang="ZH-CN" size=3>列表文件中加入標題行</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> NOLIST </font><font face="宋體" lang="ZH-CN" size=3>匯編時不產生列表文件</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> NOCODE </font><font face="宋體" lang="ZH-CN" size=3>條件匯編時,條件為假的不產生清單</font></p>
<ol>
<font face="宋體" lang="ZH-CN" size=3> </font><b>
<p align="JUSTIFY"> <font face="宋體" lang="ZH-CN"> </font><font face="宋體" lang="ZH-CN">一、</font><font face="Arial">ORG</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>偽指令</font><font face="Arial" size=3>ORG</font><font face="宋體" lang="ZH-CN" size=3>用于為在它之后的程序設置地址值,它有一個參數,其格式為:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ORG </font><font face="宋體" lang="ZH-CN" size=3>表達式</font></p>
<p align="JUSTIFY"> <font face="宋體" lang="ZH-CN" size=3>表達式可以是一個具體的數值,也可以包含變量名,如果包含變量名,則必須保證,當第一次遇到這條偽指令時,其中的變量必須已有定義(已有具體的數值),否則,無定義的值將由</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>替換,這將會造成錯誤。在列表文件中,由</font><font face="Arial" size=3>ORG</font><font face="宋體" lang="ZH-CN" size=3>定義的指令地址會被打印出來。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ORG</font><font face="宋體" lang="ZH-CN" size=3>指令有什么用途呢?指令被翻譯成機器碼后,將被存入系統的ROM中,一般情況下,機器碼總是一個接一個地放在存儲器中,但有一些代碼,其位置有特殊要求,典型的是五個中斷入口,它們必須被放在</font><font face="Arial" size=3>0003H,000BH,0013H,001BH</font><font face="宋體" lang="ZH-CN" size=3>和</font><font face="Arial" size=3>0023H</font><font face="宋體" lang="ZH-CN" size=3>的位置,否則就會出錯,如果我們編程時不作特殊處理,讓機器代碼一個接一個地生成,不能保證這些代碼正好處于這些規定的位置,執行就會出錯,這時就要用到</font><font face="Arial" size=3>ORG</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">INT_0 EQU 1000H</p>
<p align="JUSTIFY">TIME_0 EQU 1010H</p>
<p align="JUSTIFY">INT_1 EQU 1020H</p>
<p align="JUSTIFY">TIME_1 EQU 1030H</p>
<p align="JUSTIFY">SERIAL EQU 1040H</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> AJMP START ;</font><font face="宋體" lang="ZH-CN" size=3>跳轉到主程序起始點</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> LJMP INT_0 ;</font><font face="宋體" lang="ZH-CN" size=3>外中斷</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> LJMP TIME_0 ;</font><font face="宋體" lang="ZH-CN" size=3>定時中斷</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> LJMP INT_1 ;</font><font face="宋體" lang="ZH-CN" size=3>外中斷</font><font face="Arial" size=3>1</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> LJMP TIME_1 ;</font><font face="宋體" lang="ZH-CN" size=3>定時中斷</font><font face="Arial" size=3>1</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> LJMP SERIAL ;</font><font face="宋體" lang="ZH-CN" size=3>串行口中斷程序</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY">START:</p>
<p align="JUSTIFY"> NOP</p>
<p align="JUSTIFY"> END</p>
</font></i>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>上面的程序經匯編后列表文件如下</font><font face="Arial" size=3>:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> </p>
<i>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 1</p>
<p align="JUSTIFY"> 08-26-96</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> 1000 = INT_0 EQU 1000H</p>
<p align="JUSTIFY"> 1010 = TIME_0 EQU 1010H</p>
<p align="JUSTIFY"> 1020 = INT_1 EQU 1020H</p>
<p align="JUSTIFY"> 1030 = TIME_1 EQU 1030H</p>
<p align="JUSTIFY"> 1040 = SERIAL EQU 1040H</p>
</i></font>
<p align="JUSTIFY"><i><font face="Arial" size=3> 0000 0111 AJMP START ;</font></i><i><font face="宋體" lang="ZH-CN" size=3>跳轉到主程序起始點</font></i></p>
<i>
<p align="JUSTIFY"><font face="Arial" size=3> 0002 021000 LJMP INT_0 ;</font><font face="宋體" lang="ZH-CN" size=3>外中斷</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> 0005 021010 LJMP TIME_0 ;</font><font face="宋體" lang="ZH-CN" size=3>定時中斷</font><font face="Arial" size=3>0</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> 0008 021020 LJMP INT_1 ;</font><font face="宋體" lang="ZH-CN" size=3>外中斷</font><font face="Arial" size=3>1</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> 000B 021030 LJMP TIME_1 ;</font><font face="宋體" lang="ZH-CN" size=3>定時中斷</font><font face="Arial" size=3>1</font><font face="宋體" lang="ZH-CN" size=3>處理程序</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> 000E 021040 LJMP SERIAL ;</font><font face="宋體" lang="ZH-CN" size=3>串行口中斷程序</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> START:</p>
<p align="JUSTIFY"> 0011 00 NOP</p>
<p align="JUSTIFY"> 0000 END</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 2</p>
<p align="JUSTIFY"> 08-26-96</p>
<p align="JUSTIFY"> ;%T Symbol Name Type Value</p>
<p align="JUSTIFY"> INT_0 . . . . . . . . . . . . . I 1000</p>
<p align="JUSTIFY"> INT_1 . . . . . . . . . . . . . I 1020</p>
<p align="JUSTIFY"> SERIAL. . . . . . . . . . . . . I 1040</p>
<p align="JUSTIFY"> START . . . . . . . . . . . . . L 0011</p>
<p align="JUSTIFY"> TIME_0. . . . . . . . . . . . . I 1010</p>
<p align="JUSTIFY"> TIME_1. . . . . . . . . . . . . I 1030</p>
<p align="JUSTIFY"> ;%Z</p>
<p align="JUSTIFY"> 00 Errors (0000)</p>
</font></i>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋體" lang="ZH-CN" size=3>由列表文件,可以繪出代碼在ROM中的映象圖如下:</font></p>
<table BORDER cellspacing=1 bordercolor="#000000" cellpadding=1 width=451>
<tr>
<td width="9%" valign="TOP"> <font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY">代碼
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">01H
</font></td>
<td width="9%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">11H
</font></td>
<td width="9%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">02H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">10H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">00H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">02H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">10H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">10H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">02H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">10H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">20H
</font></td>
</tr>
<tr>
<td width="9%" valign="TOP"> <font face="宋體" lang="ZH-CN" size=3>
<p align="JUSTIFY">地址
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">00H
</font></td>
<td width="9%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">01H
</font></td>
<td width="9%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">02H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">03H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">04H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">05H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
<p align="JUSTIFY">06H
</font></td>
<td width="8%" valign="TOP"> <font face="Arial" size=3>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -