본문 바로가기

List/Embedded

[mipsel] printf("Helloworld") 분석

소스 


#include <stdio.h>


int main ()

{

printf("Hello World!\n");

}



objdump로 디스어셈블




addiu    sp,sp,-32     : SP(stack pointer) = SP + (-32)             (add immediate unsigned) 

sw    ra,28(sp)          : memory[sp+28] = ra(return address)    (store word)

sw    s8,24(sp)          : memory[sp+24] = s8(frame pointer)

move    s8,sp           : s8 = sp



lui    v0,0x40             : v0 = 0x40 << 16    (load upper immediate)

addiu    a0,v0,2064    : a0 = v0 + 0x810   

jal    400500              : jump 400500         (jump and link == procedure call)

move    at,at             : at = at



move    sp,s8            : sp = s8

lw    ra,28(sp)           : ra = Memory[sp+28]    (load word)

lw    s8, 24(sp)         : s8 = Memory[sp+24]

addiu    sp,sp,32       : sp = sp+32

jr    ra                       : goto address ra    (jump register)