簡體   English   中英

了解ATT匯編語言

[英]Understanding ATT Assembly Language

C版:

int arith(int x, int y, int z)
{
    int t1 = x+y;
    int t2 = z*48;
    int t3 = t1 & 0xFFFF;
    int t4 = t2 * t3;
    return t4;
}

ATT程序版本的匯編程序:

x在%ebp + 8,y在%ebp + 12,z在%ebp + 16

movl   16(ebp), %eax    
leal   (%eax, %eax, 2), %eax   
sall   $4, %eax      // t2 = z* 48... This is where I get confused
movl   12(%ebp), %edx   
addl   8(%ebp), %edx
andl   $65535, %edx
imull  %edx, %eax

我知道除了左移以外,它在程序的所有方面都在做。

我認為它將向左移動4次。 這是為什么?

謝謝!

編輯:我也知道,我感到困惑的部分等同於C版本的z * 48部分。

我不明白的是,左移4次等於z * 48。

您錯過了leal (%eax, %eax, 2), %eax行。 應用一些數學,匯編代碼如下:

a := x
a := a + 2*a    // a = 3*x
a := a * 2^4    // a = x * 3*16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM