void jump()
當sum的約束條件是"r"時,內聯彙編中應該初始化一下,movl $0, %0;
相當於初始化sum的中轉暫存器;
比如下面,編譯器選擇%edx來暫存sum,如果不清零操作,其中的值是不確定的;
再看看生成的.s檔案
subq $16, %rsp
movl $10, -4(%rbp)
movl $0, -8(%rbp)
movl -4(%rbp), %eax
# 52 "main.cpp" 1
movl $0, %edx;a:;cmpl $0, %eax;jle b;addl %eax, %edx;subl $1, %eax;jmp a;b:;
# 0 "" 2
movl %edx, -8(%rbp)
movl %eax, -4(%rbp)
movl -8(%rbp), %eax
movl %eax, %esi
leaq _zst4cout(%rip), %rdi
call _znsolsei@plt
nop
Linux C語言內聯彙編使用
最近要改個c語言演算法的關鍵部分用組合語言實現,linux裡嵌入彙編基本使用at t彙編,比如linux系統的啟動部分用的就是at t彙編 以前學過at t彙編,但學過一段時間就忘了,但對intel彙編基礎比較熟悉,兩者使用方法基本相似,所以對著intel彙編,花點時間看at t彙編也就容易了。下面...
Linux C語言內聯彙編使用
最近要改個c語言演算法的關鍵部分用組合語言實現,linux裡嵌入彙編基本使用at t彙編,比如linux系統的啟動部分用的就是at t彙編 以前學過at t彙編,但學過一段時間就忘了,但對intel彙編基礎比較熟悉,兩者使用方法基本相似,所以對著intel彙編,花點時間看at t彙編也就容易了。下面...
Linux C語言內聯彙編 函式呼叫
int func int a,int b,int c,int d,int e,int x,int y,int z int main g s檢視彙編 subq 16,rsp pushq 8 pushq 7 movl 6,r9d movl 5,r8d movl 4,ecx movl 3,edx movl...