在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            A51中段和RSEG用法

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

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

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

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

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

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

            寫這個函數(shù)體的時候:

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

            test_fun:

            ……//代碼

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

            而函數(shù)名又分:

            1:無參函數(shù)?PR?函數(shù)名?文件名

            2:有參函數(shù)?PR?_函數(shù)名?文件名

            3:再入函數(shù)?PR?_?函數(shù)名?文件名

            又例如 你定義了全局變量

            unsigned char data temp1,temp2;

            unsigned char xdata temp3;

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

            RSEG ?DT? TEST

            . temp1: DS 1

            . temp2: DS 1

            ;

            RSEG ?XD? TEST

            . temp3: DS 1

            //下面是各個類型的數(shù)據(jù)全局段的表示

            ?CO?文件名//常數(shù)段

            ?XD? FILE_NAME//XDATA數(shù)據(jù)段

            ?DT? FILE_NAME//DATA數(shù)據(jù)段

            ?ID? FILE_NAME//IDATA…..

            ?BI? FILE_NAME// BIT …..

            ?BA? FILE_NAME//BDATA….

            ?PD? FILE_NAME//PDATA…..

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

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

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

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

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

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

            2:絕對段選擇指令

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

            DSEG [AT絕對地址表達式] //內(nèi)部絕對數(shù)據(jù)段

            XSEG [AT絕對地址表達式] //外部絕對數(shù)據(jù)段

            ISEG [AT絕對地址表達式] //內(nèi)部間接尋址絕對數(shù)據(jù)段

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

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

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

            CSEG AT 0X23

            LJMP serialISR

            RSEG ?PR?serialISR?TEST

            . serialISR:



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

            評論


            技術(shù)專區(qū)

            關(guān)閉