안녕하세요?
어셈블리어 공부도중에 compare 하는 부분에서 막혀서 질문 드려봅니다...
어셈블리어 고수분들 도와주세요
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov ecx, [num1]
cmp ecx, [num2]
jg check_third_num
mov ecx, [num2]
check_third_num:
cmp ecx, [num3]
jg _exit
mov ecx, [num3]
_exit:
mov [largest], ecx
mov ecx,msg
mov edx, len
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov ecx,largest
mov edx, 2
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1
int 80h
section .data
msg db "The largest digit is: ", 0xA,0xD
len equ $- msg
num1 dd '52'
num2 dd '54'
num3 dd '56'
segment .bss
largest resb 2
이 코드가 num1, num2, num3 중에서 가장 큰 숫자를 프린드 해주는 코드인데요
몇몇숫자를 집어 넣으니 잘 돌아가는거 같습니다
근데 이 상태에서 num1의 숫자를 num1 dd '47' 이렇게 바꾸니 47로 프린트가 되는데 혹시 이유와 고치는 방법을 알려주실수 있는분 계신가요??
아무리 생각해도 이유를 잘 모르겠습니다
|