c51彙編偽指令

2021-05-28 05:32:31 字數 1679 閱讀 2248

dbit指令在內部資料區的bit 段內以位為單位保留儲存器

rseg是段選擇指令,要想明白它的意思就要了解段的意思。

段是程式**或資料物件的儲存單位。程式**放到**段,資料物件放到資料段。段分兩種,一是絕對段,一是再定位段。絕對段在組合語言中指定,在用l51聯接的時候,位址不會改變。用於如訪問乙個固定儲存器的i/o,或提供中斷向量的入口位址。而再定位段的位址是浮動的。它的位址有l51對程式模組連線時決定,c51對源程式編譯所產生的段都是再定位段,它都有段名和儲存型別。絕對段沒有段名。

例如,你寫用c寫了乙個函式 void test_fun(void) , 存在test.c中,用編譯器編譯以後. src file中看到:

?pr?test_fun?test segment code //(函式放到**段中)

寫這個函式體的時候: rseg ?pr?test_fun?test //選擇已定位的**段為當前段 test_fun:

……//**

所以函式的表達模式是這樣: ?pr?函式名?檔名

又例如 你定義了全域性變數 unsigned char data temp1,temp2; unsigned char xdata te***;

在test.c檔案中,編譯器會為每個檔案分0到多個全域性資料段,相同型別的全域性變數被存到同一段中。所以上面會

編譯成如下:

rseg ? dt? test

temp1: ds 1

temp2: ds 1

rseg ?xd? test

te***: ds 1

//下面是各個型別的資料全域性段的表示

?co? 檔名 //常數段

?xd? file_name //xdata 資料段

?dt? file_name //data 資料段

?id? file_name //idata…..

?bi? file_name // bit …..

?ba? file_name //bdata….

?pd? file_name //pdata…..

看到這裡大家應該明白段的意思了吧。也許你會問,這有什麼作用哪?它就是用在當你需要用組合語言寫一部份程式的時候,把彙編寫的函式放在這個問件中,改名***.a51,按上面的規則寫,編譯就好。

既然知道了段的意思,現在我們回到seg的用法上來。

a51中有兩種段選擇指令 : 再定位段選擇指令 和 絕對段選擇指令. 它們用來選擇當前段是再定位段還是絕對段。使用不同的段選擇指令,將使程式定位在不同的位址空間之內。

再定位段的選擇指令是: rseg 段名

它用來選擇乙個在前面已經定義過的再定位段作為當前段。

用法就像我們上面的例子,先申明了乙個函式段,後面寫這個函式段。

絕對段選擇指令

cseg [at 絕對位址表示式] //絕對**段

dseg [at 絕對位址表示式] //內部絕對資料段

xseg [at 絕對位址表示式] //外部絕對資料段

iseg [at 絕對位址表示式] //內部間接定址絕對資料段

bseg [at 絕對位址表示式] //絕對位定址段

它們的用法我舉乙個例子:

例如我們寫串列埠中斷程式,起始位址是0x23.就這樣寫

cseg at 0x23

ljmp serialisr

rseg ?pr?serialisr?test

//serialisr:

C51 彙編指令英文全稱

建立人 ruo xiao 修改人 ruo xiao 內容 增加了傳送 邏輯 算術 轉移和位運算。指令 英文全稱 意義mov move 對內部ram和sfr的資料進行傳送 movc move code 傳送程式儲存器中的資料 movx move external ram 對外部ram的資料進行傳送 x...

彙編偽指令注釋

彙編偽指令注釋 1 ds 預留儲存區命令 格式 標號 ds 表示式值 其功能是從指定位址開始,定義乙個儲存區,以備源程式使用。儲存區預留的儲存單元數由表示式的值決定。tmp ds 1 從標號tep位址處開始保留1個儲存單元 位元組 2 bit 定義位命令 其功能用於給字元名稱定義位位址。spk bi...

彙編偽指令注釋

1 ds 預留儲存區命令 格式 標號 ds 表示式值 其功能是從指定位址開始,定義乙個儲存區,以備源程式使用。儲存區預留的儲存單元數由表示式的值決定。tmp ds 1 從標號tep位址處開始保留1個儲存單元 位元組 2 bit 定義位命令 其功能用於給字元名稱定義位位址。spk bit p3.7 經...