C和彙編混合程式設計 do while

2021-10-03 03:18:28 字數 2531 閱讀 5587

環境:vc++

do while 會先執行do裡面的迴圈體,執行完去執行while的條件判斷,如果為真,繼續執行do裡面的迴圈體,如果為假,則結束迴圈

c程式:

上面先執行sum+=i;i++;,接著執行i<=100,如果為true,則繼續執行do迴圈,否則,結束迴圈。

反彙編:

5

: int i=

1,sum=0;

00401028 c7 45 fc 01

0000

00 mov dword ptr [ebp-4]

,10040102f c7 45 f8 00

0000

00 mov dword ptr [ebp-8]

,06:

dowhile

(i<=

100)

;00401048

837d fc 64 cmp dword ptr [ebp-4]

,64h

0040104c 7e e8 jle main+

26h (

00401036)10

:printf

("sum=%d\n"

,sum)

;0040104e 8b 55 f8 mov edx,dword ptr [ebp-8]

00401051

52 push edx

00401052

681c 20

4200 push offset string "sum=%d\n"

(0042201c)

00401057 e8 34

0000

00 call printf (

00401090

)0040105c 83 c4 08 add esp,811

:return0;

0040105f 33 c0 xor eax,eax12:

}

從上面的程式我們可以看出,sum+=i就是

00401036

8b 45 f8 mov eax,dword ptr [ebp-8]

00401039

0345 fc add eax,dword ptr [ebp-4]

0040103c 89

45 f8 mov dword ptr [ebp-8]

,eax

i++就是:

0040103f 8b 4d fc             mov         ecx,dword ptr [ebp-4]

00401042

83 c1 01 add ecx,

100401045

894d fc mov dword ptr [ebp-4]

,ecx

彙編執行完這幾條語句,就去執行

00401048

837d fc 64 cmp dword ptr [ebp-4]

,64h

0040104c 7e e8 jle main+

26h (

00401036

)

比較[ebp-4]和100的大小,如果小於等於就跳轉到00401036執行,否則往下執行,相當於c中i<=100,如果小於等於,繼續執行迴圈體,否則結束

c和混編混合程式設計:

C和彙編混合程式設計

c和彙編混合程式設計 嵌入式裡面用到彙編的地方 開機時的硬體系統的初始化,包括cpu的狀態設定,中斷使能主頻設定,以及ram控制引數以及初始化一些中斷處理方面涉及一些彙編。c中內嵌彙編大多數為arm和thumb指令,其中注意 1 不能直接向pc賦值,程式跳轉用b或者bl指令 2 使用物理暫存器不能使...

C 彙編的混合程式設計

aptcs arm thumb 程式呼叫規範 pcs規定了應用程式的函式可以如何分開地寫,分開地編譯,最後將它們連線在一起,所以它實際上定義了一套有關過程 函式 呼叫者與被呼叫者之間的協議。協議規定 呼叫函式如何傳遞引數 即壓棧方法,以何種方式存放引數 被呼叫函式 如何獲取引數,以何種方式傳遞函式返...

ARM彙編和C混合程式設計 筆記

arm復位啟動先執行彙編指令,完成硬體的初始化 為什麼不用c語言?因為c語言無法訪問arm內部的暫存器,例如棧,所以需要彙編來進行初始化 c語言能不能跟彙編相互並且反覆呼叫?不能,因為這樣容易導致區域性變數的混用。彙編呼叫c程式 global start start 將gpj2 3 output l...