if語句的彙編表示

2022-02-21 20:30:07 字數 1590 閱讀 1655

**:

demo:

c語言:

int  max(int x,int

y)

產生的彙編**如下:

00000000

:0: 55          push %ebp

1: 89   e5    mov %esp,%ebp

3: 8b  45

08  mov 0x8(%ebp),%eax

6: 3b  45 0c  cmp 0xc(%ebp),%eax

9: 7e  05      jle 10

0x10>b: 8b 

4508  mov 0x8(%ebp),%eax

e: eb 

03       jmp 13

0x13>

10: 8b  45 0c  mov 0xc(%ebp),%eax

13: 5d          pop %ebp

14: c3          ret

要理解上面的彙編**,可以先把c程式寫成帶有goto語句的版本,

int max(int x,int

y)

c**中if(x>y)在彙編中,先判斷x是否小於等於y,如果小於等於,則發生跳轉,否則不跳轉。

這裡,組合語言也可以使用另外乙個規則,

int max(int x,int

y)

實際上,組合語言沒有採用上面的做法,因為在c語言中,許多條件語句只有if語句,沒有else語句,上面的**中在這種情況下,也會至少跳轉一次,這樣會影響程式的效率。

組合語言中的常見跳轉語句:

jmp label直接跳轉

je label相等

jne label不等

js label負數

jns label非負數

ja label大於

jae label大於等於

jb label小於

jbe label小於等於

jg label大於

jge label大於等於

jl label小於

jle label小於等於

jg  jge jle jl用於比較有符號數,而ja  jae  jb  jbe用於比較無符號數

有時,編譯器為了加快條件語句的轉移速度,會使用條件傳送指令,改寫max函式,如下:

int  max(int x,int

y)

其他例子:

.text

.global

_start

_start:

mov r1,#

1mov r2,#

2cmp r1, r2

bgt branch1

add r3,r1,r2

b end

branch1:

sub r3,r1,r2

end:

nopc 語言:

if(a>b)

a = a-b

else

a = a +b

if語句的彙編表示

gcc產生的 可以使用objdump 檢視它對應的彙編 gcc檢視彙編 本文主要介紹條件語句if 語句的彙編表示 有以下 int max int x,int y 產生的彙編 如下 00000000 0 55 push ebp 1 89 e5 mov esp,ebp 3 8b 45 08 mov 0x...

彙編中的結構體表示

我認為,彙編中一切皆位址。在c c 使用很多的結構體,在彙編中是如何表示的呢?其實,在彙編中根本就沒有什麼結構體的概念,結構體本質就是一堆連在一起的資料。只不過有人把他們想象成乙個整體,並以此產生結構體的概念,這與結構體中帶有變長陣列時候的情形一樣 其實上面這個結構體尾部帶有的變長陣列,data 0...

if 語句在彙編的作用

int x 100 004113ae mov dword ptr x 64h if x 200 004113b5 cmp dword ptr x 0c8h 004113bc jne wmain 47h 4113d7h else 004113d5 jmp wmain 5eh 4113eeh print...