A51 中段和RSEG用法

2021-05-22 23:55:51 字數 1772 閱讀 7162

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?函式名?檔名

而函式名又分: 1:無參函式 ?pr?函式名?檔名

2:有參函式 ?pr?_函式名?檔名

3:再入函式 ?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中有兩種段選擇指令 : 再定位段選擇指令 和 絕對段選擇指令. 它們用來選擇當前段是再定位段還是絕對段。使用不同的段選擇指令,將使程式定位在不同的位址空間之內。

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

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

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

2: 絕對段選擇指令

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

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

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

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

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

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

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

cseg at 0x23

ljmp serialisr

rseg ?pr?serialisr?test

. serialisr:

A51中的偽指令

a51中得偽指令 本章講解彙編器的偽指令。說明如何定義符號和怎樣控制 和資料在程式儲存器中的位置。簡介 ax51彙編器有一些偽指令,可以讓我們定義符號值,預留和初始化記憶體,以及控制 的位置。不要把偽指令與指令相混淆。偽指令不產生可執行的 除db,dw和dd之外,它們對 儲存器的內容沒有直接的影響。...

51nod 最大子段和

給出乙個整數陣列a 正負數都有 如何找出乙個連續子陣列 可以乙個都不取,那麼結果為0 使得其中的和最大?例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。輸入 第1行 整數序列的長度n 2 n 50000 第2 n 1行 n個整數 10 9 a i 10 9 輸出 輸出最大...

51nod 最大子段和

題面 以乙個長為n的數列,求連續子段的最大值。思路1直接列舉o n 3 tle穩穩的 include using namespace std int n,a 50050 ans int main ans max ans,t 更新最值 cout n return 0 字首和優化的列舉法,o n 2 還...