新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 混合使用C、C++和匯編語之:內聯匯編和嵌入型匯編的使用

        混合使用C、C++和匯編語之:內聯匯編和嵌入型匯編的使用

        作者: 時間:2013-09-30 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257034.htm

        7.指令中的操作數

        指令中的操作數分為以下4種。

        ·虛擬寄存器

        ·表達式操作數

        ·寄存器列表

        ·中間操作數

        (1)虛擬寄存器

        指令中指定的寄存器表示虛擬寄存器而不是實際的物理寄存器。由編譯器編譯的匯編代碼中使用的物理寄存器可能與在指令中指定的不同。每個虛擬寄存器的初值是不可預測的,必須在讀取之前將初值寫入虛擬寄存器。如果在寫入之前試圖讀虛擬寄存器,編譯程序會給予警告。

        (2)表達式操作數

        在內聯匯編指令中,可將函數自變量、++變量和其他表達式指定為寄存器操作數。用作操作數的表達式必須為整數類型,如char、short、int或long,(長整型longlong除外)或指針類型。當表達式作為內聯匯編指令的操作數時,編譯器在編譯時自動增加一段代碼計算表示式的值并將其加載到指定的寄存器中。

        注意

        數據類型中除char和short(默認為無符號類型)外,其他均為有符號類型。

        下面的例子顯示了編譯器如何處理內聯匯編中的表達式操作數。

        程序源代碼如下所示。

        /*ExampleOperands*/

        voidmy_operand(void)

        {

        inti,j,total;

        __asm

        {

        movi,#0

        movj,#1

        addtotal,j,i+j

        }

        }

        intmain(void)

        {

        my_operand();

        }

        由編譯器編譯出的匯編代碼如下所示(其中只列出了內聯匯編的一段代碼)。

        my_operand:

        0000807CE3A01000MOVr1,#0

        >>>OPERANDS#12movj,#1

        00008080E3A00001MOVr0,#1

        00008084E0812000ADDr2,r1,r0

        >>>OPERANDS#13addtotal,j,i+j

        00008088E0803002ADDr3,r0,r2

        >>>OPERANDS#15}

        0000808CE12FFF1EBXr14

        >>>OPERANDS#19{

        c語言相關文章:c語言教程


        c++相關文章:c++教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 图们市| 麟游县| 桐庐县| 广平县| 甘南县| 隆回县| 建宁县| 通城县| 霍山县| 阿巴嘎旗| 蒲江县| 道孚县| 通渭县| 丘北县| 韶山市| 湘乡市| 乌兰察布市| 金塔县| 平武县| 长子县| 台中县| 德保县| 龙井市| 双流县| 台东县| 卫辉市| 本溪| 于都县| 永寿县| 友谊县| 德安县| 那坡县| 波密县| 泾川县| 尚义县| 营口市| 榆树市| 河曲县| 林甸县| 房山区| 抚宁县|