Linux C語言內聯彙編 條件跳轉

2021-08-20 22:22:25 字數 596 閱讀 1483

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...