<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > A51中段和RSEG用法

A51中段和RSEG用法

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
RSEG是段選擇指令,要想明白它的意思就要了解段的意思。

段是程序代碼或數據對象的存儲單位。程序代碼放到代碼段,數據對象放到數據段。段分兩種,一是絕對段,一是再定位段。絕對段在匯編語(yǔ)言中指定,在用L51聯(lián)接的時(shí)候,地址不會(huì )改變。用于如訪(fǎng)問(wèn)一個(gè)固定存儲器的i/o,或提供中斷向量的入口地址。而再定位段的地址是浮動(dòng)的。它的地址由L51對程序模塊連接時(shí)決定,C51對源程序編譯所產(chǎn)生的段都是再定位段,它都有段名和存儲類(lèi)型。絕對段沒(méi)有段名。

本文引用地址:http://dyxdggzs.com/article/201611/321759.htm

說(shuō)了這么多,大家可能還是不明白段是什么意思。別急,接著(zhù)往下看。

例如,你用C寫(xiě)了一個(gè)函數void test_fun(void) { …} ,存在test.c中,用編譯器編譯以后,在SRC FILE中會(huì )看到:

?PR?test_fun?TEST SEGMENT CODE //(函數放到代碼段中)

寫(xiě)這個(gè)函數體的時(shí)候:

RSEG ?PR?test_fun?TEST //選擇已定位的代碼段為當前段

test_fun:

……//代碼

所以函數的表達模式是這樣:?PR?函數名?文件名

而函數名又分:

1:無(wú)參函數?PR?函數名?文件名

2:有參函數?PR?_函數名?文件名

3:再入函數?PR?_?函數名?文件名

又例如 你定義了全局變量

unsigned char data temp1,temp2;

unsigned char xdata temp3;

在test.c文件中,編譯器會(huì )為每個(gè)文件分0到多個(gè)全局數據段,相同類(lèi)型的全局變量被存到同一段中。所以上面會(huì )編譯成如下:

RSEG ?DT? TEST

. temp1: DS 1

. temp2: DS 1

;

RSEG ?XD? TEST

. temp3: DS 1

//下面是各個(gè)類(lèi)型的數據全局段的表示

?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…..

看到這里大家應該明白段的意思了吧。也許你會(huì )問(wèn),這有什么作用哪?它就是用在當你需要用匯編語(yǔ)言寫(xiě)一部份程序的時(shí)候,把匯編寫(xiě)的函數放在這個(gè)文件中,改名xxx.a51,按上面的規則寫(xiě)。編譯就好。

既然知道了段的意思,現在我們回到SEG的用法上來(lái)。

A51中有兩種段選擇指令:再定位段選擇指令和絕對段選擇指令.它們用來(lái)選擇當前段是再定位段還是絕對段。使用不同的段選擇指令,將使程序定位在不同的地址空間之內。

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

它用來(lái)選擇一個(gè)在前面已經(jīng)定義過(guò)的再定位段作為當前段。

用法就像我們上面的例子,先聲明了一個(gè)函數段,后面寫(xiě)這個(gè)函數段。

2:絕對段選擇指令

CSEG [AT絕對地址表達式] //絕對代碼段

DSEG [AT絕對地址表達式] //內部絕對數據段

XSEG [AT絕對地址表達式] //外部絕對數據段

ISEG [AT絕對地址表達式] //內部間接尋址絕對數據段

BSEG [AT絕對地址表達式] //絕對位尋址段

它們的用法我舉一個(gè)例子:

例如我們寫(xiě)串口中斷程序,起始地址是0x23.就這樣寫(xiě)

CSEG AT 0X23

LJMP serialISR

RSEG ?PR?serialISR?TEST

. serialISR:



關(guān)鍵詞: A51中段RSEG用

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>