section .data
msg db "Result: %d", 0
section .text
global main
extern printf
main:
push rbp
mov ebp, esp
mov eax, 10
mov ebx, 4
imul eax, ebx
mov esi, eax
mov edi, msg
xor eax, eax
call printf
mov eax, 0
leave
ret
데이터 섹션
;출력할 문자열 정의하는데 %d는 정수 출력, 0은 문자열 끝을 표시하는 null terminator임
section .data
msg db "Result: %d", 0
텍스트 섹션
section .text
global main ;전역 함수 선언
extern printf ;printf 함수 사용 선언
메인함수 시작
;스택 프레임 설정
main:
push rbp ;현재 스택 프레임 저장
mov ebp, esp ;새 스택 프레임 설정
변수 초기화 / 연산
mov eax, 10 ;eax에 10 저장
mov ebx, 4 ;ebx에 4 저장
imul eax, ebx ;eax = eax * ebx
printf함수 실행
mov esi, eax ;esi에 eax 저장
mov edi, msg ;edi에 msg 주소 저장
xor eax, eax ;eax 초기화 (printf 규약)
call printf ;printf 호출
종료
mov eax, 0 ;정상 종료 코드 저장
leave ;스택 복원
ret ;함수 종료
C언어 변환 후
#include <stdio.h>
int main(void) {
int a = 10;
int b = 4;
int result = a * b;
printf("Result: %d", result);
return 0;
}