在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 為什么ARM匯編程序前要加PRESERVE8

            為什么ARM匯編程序前要加PRESERVE8

            作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
            這是字節(jié)對齊關鍵詞,以前用ADS編譯器的時候可以不用,但是后來的keil編譯器時需要加上(譬如用周立功模板時,將ADS工程轉(zhuǎn)到keil工程時就必須加上)。
            require8和preserve8

            c和匯編有8位對齊的要求,這兩個偽指令可以滿足此要求,存在REQUIRE8<——> PRESERVE8的對應關系,但不是說有一個REQUIRE8就要有一個 PRESERVE8,如果是一個c文件和一個匯編文件的調(diào)用,也就涉及一個PRESERVE8或者是一個REQUIRE8, 以下剪自ADS1.2中 PDF,就很清楚,由此可見,最好不要使用LDRD 或 STRD。
            LDRD and STRD instructions (double-word transfers) only work correctly if the address they access is 8-byte aligned.
            If your code includes LDRD or STRD transfers to or from the stack, use REQUIRE8 to instruct the linker to ensure that your code is only called from objects that preserve 8-byte alignment of the stack.
            If your code preserves 8-byte alignment of the stack, use PRESERVE8 to inform the linker.
            The linker ensures that any code that requires 8-byte alignment of the stack is only called, directly or indirectly, by code that preserves 8-byte alignment of the stack.
            另外,REQUIRE8和PRESERVE8并不完成8 byte 對齊的操作,對齊由ALIGN完成。

            RealView? 編譯工具 匯編程序指南3.1 版
            Home> 指令參考> 其他指令> REQUIRE8 和 PRESERVE8

            7.8.14.REQUIRE8 和 PRESERVE8


            REQUIRE8
            指令指定當前文件要求堆棧八字節(jié)對齊。 它設置 REQ8 編譯屬性以通知鏈接器。

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


            PRESERVE8
            指令指定當前文件保持堆棧八字節(jié)對齊。 它設置 PRES8 編譯屬性以通知鏈接器。

            鏈接器檢查要求堆棧八字節(jié)對齊的任何代碼是否僅由保持堆棧八字節(jié)對齊的代碼直接或間接地調(diào)用。


            語法
            REQUIRE8 {bool}    
            PRESERVE8 {bool}    

            其中:



            bool

            是一個可選布爾常數(shù),取值為
            {TRUE}

            {FALSE}


            用法

            如果您的代碼保持堆棧八字節(jié)對齊,在需要時,可使用
            PRESERVE8
            設置文件的 PRES8 編譯屬性。 如果您的代碼不保持堆棧八字節(jié)對齊,則可使用
            PRESERVE8 {FALSE}
            確保不設置 PRES8 編譯屬性。


            Note

            如果您省略
            PRESERVE8

            PRESERVE8 {FALSE}
            ,匯編程序會檢查修改 sp 的指令,以決定是否設置 PRES8 編譯屬性。 ARM 建議明確指定
            PRESERVE8
            。

            您可以通過以下形式啟用警告:

            armasm --diag_warning 1546    

            有關詳細信息,請參閱命令語法。

            您將會收到類似以下警告:

            "test.s", line 37: Warning: A1546W: Stack pointer update potentially      breaks 8 byte stack alignment     37 00000044 STMFD sp!,{r2,r3,lr}    

            示例
            REQUIRE8    REQUIRE8     {TRUE}      ; equivalent to REQUIRE8    REQUIRE8     {FALSE}     ; equivalent to absence of REQUIRE8    PRESERVE8    {TRUE}      ; equivalent to PRESERVE8    PRESERVE8    {FALSE}     ; NOT exactly equivalent to absence of PRESERVE8    

            Copyright ? 2002-2007 ARM Limited. All rights reserved.ARM DUI 0204HC
            Non-Confidential



            評論


            技術專區(qū)

            關閉