어셈블리 언어를 사용하고 있지 않습니다. 나는 Ubuntu-Linux에서 nasm을 사용하고 있습니다. 나는 책에서 예를 발견했다. 그러나 올바르게 작동하지 않습니다. 문제를 찾을 수 없었습니다. 저 좀 도와 주 시겠어요?NASM의 ascii 문자가 올바르게 작동하지 않습니다.
감사합니다. 그것은 가장 큰 자리를 찾아야한다
section .text
global main
main:
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
mov eax, 4
int 0x80
mov ecx, largest
mov edx, 2
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 80h
section .data
msg db "The largest digit is:", 0xA, 0xD
len equ $- msg
num1 dd '17'
num2 dd '52'
num3 dd '31'
segment .bss
largest rest 2
다음과 같이
내 코드입니다. 그러나 결과는 가장 큰 숫자는
입니다 :
17
대단히 감사합니다. 이것은 매우 도움이되었습니다. 숫자의 자릿수 크기는 변경하지 않았습니다. 원래 숫자는 '47', '22'및 '31'이었습니다. 따라서 코드는 우연히 올바른 결과를 발견했습니다. 이 책은 그것에 대해 아무 것도 언급하지 않습니다. 어쩌면 당신은 그런 책을 써야 할 것이다 :) 한가지 더 : 그것은 항상 4 바이트의 데이터가 메모리 주소로부터 32 비트 레지스터로 옮겨지는 것을 보장 하는가? 고맙습니다. – user2972185
각 바이트는 8 비트이므로 예, 32 비트는 4 바이트입니다. 더 작은 데이터를 더 작은 레지스터에로드하거나 부호/제로 확장 ('MOVSX','MOVZX')을 사용할 수 있습니다. – Jester