1. 程式人生 > >程式的機器級表示——《深入理解計算機系統》

程式的機器級表示——《深入理解計算機系統》

函式caller的彙編程式碼:
_caller:
    pushl    %ebp                        ;儲存基址指標
    movl    %esp, %ebp             ;把基址指標設定為當前的棧頂(意味著call函式棧的開始)
    subl    $24, %esp                 ;分配24個位元組作為棧空間
    movl    $534, -12(%ebp)     ;在距離基址12位元組處 作為引數arg1的空間(此間有8位元組的空檔)
    movl    $1057, -16(%ebp)   ;在距離基址16位元組處 作為引數arg2的空間
    leal    -16(%ebp), %eax  ;
    movl    %eax, 4(%esp)        ;把引數2的地址值放到離棧頂指標的4位元組處
    leal    -12(%ebp), %eax
    movl    %eax, (%esp)          ;把引數1的地址值放到棧頂指標處
    call    _swap_add               ;呼叫函式swap_add(把當前程式正文地址壓棧,跳轉到函式swap_add地址處)
    movl    %eax, -8(%ebp)     ;把返回值%eax放到距離基址8位元組處 作為引數sum的空間
    movl    -12(%ebp), %edx
    movl    -16(%ebp), %eax
    movl    %edx, %ecx
    subl    %eax, %ecx              ;arg1 - arg2
    movl    %ecx, %eax
    movl    %eax, -4(%ebp)    ;把arg1 - arg2的結果值放到距離基址4位元組處 作為引數diff的空間
    movl    -8(%ebp), %eax
    imull    -4(%ebp), %eax   ;sum*diff
    leave
    ret