久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

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

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

本文引用地址:http://cqxgywz.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++教程




評論


相關推薦

技術專區

關閉