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 經...