A51中的偽指令

2021-06-07 05:49:34 字數 3087 閱讀 2256

a51中得偽指令

本章講解彙編器的偽指令。說明如何定義符號和怎樣控制**和資料在程式儲存器中的位置。

簡介

ax51彙編器有一些偽指令,可以讓我們定義符號值,預留和初始化記憶體,以及控制**的位置。

不要把偽指令與指令相混淆。偽指令不產生可執行的**,除db,dw和dd之外,它們對**儲存器的內容沒有直接的影響。這些偽指令改變彙編器的狀態,定義使用者符號,以及新增資訊到目標檔案。

下表是對彙編器偽指令的乙個彙總。關於每條偽指令的詳細資訊,相應鏈結檢視。

偽指令格 式

說 明bit符號 bit 位位址

在位資料空間定義乙個位位址。

bsegbseg [at 絕對位址]

在位位址空間定義乙個絕對位址段。

code符號 code **位址

為**空間內的乙個指定位址分配乙個符號名。

csegcseg [at 絕對位址]

在**位址空間定義乙個絕對位址段。

data符號 data 資料位址

給乙個指定的片內資料位址分配乙個符號名。

db[標號:] db 表示式[, 表示式...]

定義一列位元組型數值。

dbit[標號:] dbit 表示式

在位單元中預留乙個空間。

dd[標號:] dd 表示式[, 表示式...]

定義一列雙字型數值。

ds[標號:] ds 表示式

在位元組空間預留空間。

dsb[標號:] dsb 表示式

在位元組空間預留空間。

dsd[標號:] dsd 表示式

在雙字空間預留空間。

dsegdseg [at 絕對位址]

在間接定址內部資料空間定義乙個絕對段。

dsw[標號:] dsw 表示式

在字空間預留空間;增加當前段的位置計數器。

dw[標號:] dw 表示式[, 表示式...]

定義一列字數值。

endend

指示程式的結束。

equequ 表示式

永久設定符號值。

__error____error__ 文字

產生一條標準的出錯資訊。羅畝按:前後均是兩條下劃線(_)。

eveneven

確保變數的字對齊。

extrnextrn 儲存空間型別 [:資料型別] (符號 [, ...])

定義在當前模組中引用的在其它模組中定義的符號。

externextern 儲存空間型別[:資料型別] (符號 [, ...])

idata符號 idata idata位址

為指定的間接定址的內部位址定義乙個符號名稱。

isegiseg [at 絕對位址]

在內部資料空間內定義乙個絕對段。

label名稱[:] label [資料型別]

在段中為乙個位址位置定義乙個符號名。

lit符號 lit '文字串'

為字串定義乙個符號名。

namename 模組名稱

為當前模組命名

orgorg 表示式

設定當前段的位置計數器

proc名稱 proc [資料型別]

定義乙個函式的開頭和結尾。

endp名稱 endp

publicpublic 符號 [, 符號...]

標明可以用於當前模組外部的符號。

rsegrseg 段名

選擇乙個可重定位的段。

segment段名 segment 儲存空間型別 [reloctype] [alloctype]

定義乙個可重定位的段。

setset 表示式

臨時設定符號值。

sfr,sfr 符號 = 位址;

定義乙個特殊功能暫存器(sfr)符號或者乙個sfr位符號。

sfr16sfr16 符號 = 位址;

sbitsbit 符號 = 位址;

usingusing 表示式

設定預定義的符號化暫存器位址,並為指令的暫存器堆預留空間。

xdata符號 xdata xdata位址

為指定的片外資料位址定義乙個符號名。

xsegxseg [at 絕對位址]

在外部資料位址空間定義乙個絕對段。

背景為綠色的偽指令和選項僅適用於ax51a251

羅畝按:原文中把end和equ行的背景也設為了綠色,我認為這可能是明顯的筆誤,因為這兩個偽指令在a51中使用得很好,所以此外沒有加綠色背景。如果哪位網友認為我的理解有誤,請斧正。

偽指令被分為如下幾大類:

ax51彙編器是乙個多次掃瞄彙編器。在第一次掃瞄時,符號值被確定。在接下來的掃瞄中,前向引用被解析,目標**生成。這種結構產生了對源程式的一種限制:定義符號值的表示式和控制位置計數器的表示式不可以有前向引用。

c51彙編偽指令

dbit指令在內部資料區的bit 段內以位為單位保留儲存器 rseg是段選擇指令,要想明白它的意思就要了解段的意思。段是程式 或資料物件的儲存單位。程式 放到 段,資料物件放到資料段。段分兩種,一是絕對段,一是再定位段。絕對段在組合語言中指定,在用l51聯接的時候,位址不會改變。用於如訪問乙個固定儲...

bootloader中的偽指令分析

偽指令 pseudo instruction 是用於告訴匯程式設計序如何進行彙編的指令。它既不控制機器的操作也不被彙編成機器 只能為匯程式設計序所識別並指導彙編如何進行。比如 ldr r0,0x48000000 由於0x48000000比較簡單,可以表示成立即數 每個立即數由乙個8位的常數迴圈右移偶...

A51 中段和RSEG用法

rseg是段選擇指令,要想明白它的意思就要了解段的意思。段是程式 或資料物件的儲存單位。程式 放到 段,資料物件放到資料段。段分兩種,一是絕對段,一是再定位段。絕對段在組合語言中指定,在用l51聯接的時候,位址不會改變。用於如訪問乙個固定儲存器的i o,或提供中斷向量的入口位址。而再定位段的位址是浮...