彙編 C語言的IF轉彙編

2022-09-21 12:51:08 字數 1990 閱讀 9104

#include int main()else

return 0;

}

對應彙編**如下

00ae1a10  push        ebp  ;棧提公升

00ae1a11 mov ebp,esp

00ae1a13 sub esp,0d8h

00ae1a19 push ebx ;儲存現場

00ae1a1a push esi

00ae1a1b push edi

00ae1a1c lea edi,[ebp+ffffff28h] ;對新提公升的棧初始化

00ae1a22 mov ecx,36h

00ae1a27 mov eax,0cccccccch

00ae1a2c rep stos dword ptr es:[edi]

00ae1a2e mov dword ptr [ebp-8],1 ;將數值儲存到提公升棧中

00ae1a35 mov dword ptr [ebp-14h],2

00ae1a3c mov eax,dword ptr [ebp-8] ;獲取提公升棧中的值

00ae1a3f cmp eax,dword ptr [ebp-14h] ;兩個值進行比較

00ae1a42 jle 00ae1a5d ;如果第乙個值小於等於第二個值,那麼將跳轉到00ae1a5d繼續執行,也就是else處

00ae1a44 mov esi,esp

00ae1a46 push 0ae58a8h ;函式變數入棧

00ae1a4b call dword ptr ds:[00ae9114h] ;函式呼叫

00ae1a51 add esp,4 ;結束函式呼叫後,堆疊平衡

00ae1a54 cmp esi,esp

00ae1a56 call 00ae113b

00ae1a5b jmp 00ae1a74 ;跳轉到else**之後,在00ae1a74處繼續執行指令

00ae1a5d mov esi,esp

00ae1a5f push 0ae58ach

00ae1a64 call dword ptr ds:[00ae9114h]

00ae1a6a add esp,4

00ae1a6d cmp esi,esp

00ae1a6f call 00ae113b

00ae1a74 xor eax,eax ;函式分支功能結束

00ae1a76 pop edi

00ae1a77 pop esi

00ae1a78 pop ebx

00ae1a79 add esp,0d8h

00ae1a7f cmp ebp,esp

00ae1a81 call 00ae113b

00ae1a86 mov esp,ebp

00ae1a88 pop ebp

00ae1a89 ret

c語言:滿足某些條件時,進行執行大括號內的程式**

組合語言:翻譯成與c語言相反的邏輯,在達到某些條件下,跳過這些程式**

下述兩種if格式對應彙編,原理與上述原理相同

if(表示式)

if(表示式)else if(表示式)else

彙編 C語言的for轉彙編

for 變數初始化操作 判斷是否執行迴圈 變數增減操作 提公升堆疊 00f83c00 push ebp 00f83c01 mov ebp,esp 00f83c03 sub esp,0cch 儲存現場 00f83c09 push ebx 00f83c0a push esi 00f83c0b push ...

從C語言到彙編,從彙編到C語言

看雪一同志寫的文章,我覺得很基礎和有用,知識著眼於小處。積累才是王道!一 迴圈語句與發彙編後的機器語言 1 for迴圈 下面是一段c語言的 我們的目的是來看其反彙編的結果 int myfunction int a,int b return c 前面的反彙編暫時不理它,這裡從for的地方開始反彙編,結...

C語言嵌入彙編

概述 linux核心原始碼中,有很多c語言中嵌入了彙編語句,如何理解這些彙編語句,對理解核心有很重要的作用。具有輸入和輸出引數的嵌入式彙編語句的基本格式為 asm 彙編語句 輸出暫存器 輸入暫存器 會被修改的暫存器 除第一行以外,後面帶冒號的行若不使用就都可以省略。彙編語句 是你寫彙編指令的地方 輸...