어셈블러 질문입니다

wcg0112의 이미지

void full_umul(unsigned int x, unsigned int y, unsigned int dest[])

full_umul:
pushl %ebp
movl %esp, %ebp

subl $4, %esp
movl 8(%ebp), %eax
mull 12(%ebp)
movl %eax, 16(%ebp)
movl %edx, 20(%ebp)
leave
ret
.size full_umul, .-full_umul
.section .rodata

이렇게 짜놧는데요...

근데 결과값이 쓰래기값만 출력되네요;;

32비트 2개 곱해서 64비트 출력하는건데

책에보니까 32비트 2개 곱해서

eax edx로 자동으로 할당된다고...

어디가 잘못된건지 지금 2시간쨰 봐도 손을 못데겠네요 ㅠㅠ

Necromancer의 이미지

중간의 mull 12(%ebp)에서

eax * dword ptr SS:[EBP+12] 를 수행한 결과가 EDX:EAX로 저장됩니다.
위에보니 스택으로 빼고 있군요.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction