C 為何內聯彙編找不到定義的變數?

時間 2021-05-30 19:28:25

1樓:

GCC的inline彙編裡,暫存器要加"%",如果是擴充套件內聯彙編,暫存器要加"%%",

fs暫存器符號要改成"%fs",同時mov "mov (fs+48) ,..."也不能這麼寫,你想的太美好了.

要寫成:

"mov 48(%fs), %eax\n"

不要問我lea指令怎麼寫!!!!!

另外你引用了變數pPEB,必須使用擴充套件內聯彙編用來連線內聯彙編的暫存器和C語言中的變數,所有的暫存器多加乙個"%%",然後要寫input,output和破壞描述符:

asm __volatile34;mov 48(%%fs), %%eax\n\t"

"mov %%eax, %0 \n\t൪r"(pPEB) //字首加"r"我並非完全確定,從來沒搞清楚過34;eax"

);GCC這inline彙編就不是人寫的.

2樓:

因為 g++ 的內聯彙編不是這麼寫的。

給你個大概的例子:

#include

int main(int argc, char **argvint in = 543210int outasm34;mov %1, %0\n൪=r"(out34;r"(inprintf("%d\n", outreturn 0;}

C 內聯函式和constexpr函式可以在程式中定義不止一次,這個一般用在什麼時候?

楊個毛 用來讓你製造一堆weak symbol,然後一不小心試圖把兩個不同libstdc 版本的.o檔案鏈結在一起的時候死得不明不白的。 Pluto Hades 你們為什麼搞這麼複雜?inline關鍵字是在宣告的時候用的,不是在定義的時候寫。題主你把inline和函式體挪到頭檔案再試一次。另外,C ...

微控制器程式設計最早是彙編,然後從彙編轉為c語言,那麼,c 會不會替代c語言來進行微控制器程式設計 ?

蒙塔基的鋼蛋兒 做可以做,但是Cpp必須閹割,也就是只是C with class了,想用string?不存在的。不敢用的。例如汽車行業中的ISO26262.這就完全限制了heap的使用。 configex if 個人認為僅用基本的OOP特性的話,C 更適合嵌入式開發,尤其是涉及大量外設的情況。其實A...

組合語言中的 向C進製 c是什麼意思?

孟桓慶 Status Flags The status flags reflect the outcomes of arithmetic and logical operations performed by the CPU.The carry flag CF is set when the res...