Я хочу, чтобы вводимые пользователем данные сравнивались с переменной «num». это, конечно, не работает так, как задумано. когда я отлаживаю его с помощью GDB и наблюдаю за значением, это что-то случайное, например 0xa3404856, и я не понимаю почему.
это код:
section .data
enter_msg DB "Enter Your Guess : ", 0
enter_msg_len equ $-enter_msg
invalid_input_msg DB "Invalid Input !!!", 0x0a, 0
invalid_input_msg_len equ $-invalid_input_msg
input_out_of_range DB "Input Out Of Range !!!", 0x0a, 0
input_out_of_range_len equ $-input_out_of_range
too_high_msg DB "Your Guess Is Too High !!!", 0x0a, 0
too_high_msg_len equ $-too_high_msg
too_low_msg DB "Your Guess Is Too Low !!!", 0x0a, 0
too_low_msg_len equ $-too_low_msg
win_msg_1 DB "You Won ! The Number Was ", 0
win_msg_1_len equ $-win_msg_1
win_msg_2 DB " And You Guessed It In ", 0
win_msg_2_len equ $-win_msg_2
win_msg_3 DB " Guesses !", 0x0a, 0
win_msg_3_len equ $-win_msg_3
num equ 64
section .bss
guess resb 32
guesses resb 8
section .text
global _start
_start:
%macro print 2
mov eax, 4
mov ebx, 1
mov ecx, %1
mov edx, %2
int 0x80
%endmacro
%macro input 2
mov eax, 3
mov ebx, 2
mov ecx, %1
mov edx, %2
int 0x80
%endmacro
%macro exit 0
mov eax, 1
mov ebx, 0
int 0x80
%endmacro
%macro compare 2
mov eax, %1
mov ebx, %2
cmp eax, ebx
jg higher
jl lower
je win
%endmacro
print enter_msg, enter_msg_len
input guess, 32
mov ebx, num
mov eax, [guess]
cmp eax, ebx
jl lower
jg higher
jz win
lower:
print too_low_msg, too_low_msg_len
jmp _start
higher:
print too_high_msg, too_high_msg_len
jmp _start
win:
print win_msg_1, win_msg_1_len
print num, 2
print win_msg_2, win_msg_2_len
print guesses, 4
print win_msg_3, win_msg_3_len
jmp end
end:
exit
Меня больше всего сбивает с толку то, почему приведенный выше код не работает, а этот работает:
print enter_msg, enter_msg_len
input num1, 8
print enter_msg, enter_msg_len
input num2, 8
mov eax, [num1]
mov ebx, [num2]
cmp eax, ebx
jg higher
jl lower
je win
Подробнее здесь: https://stackoverflow.com/questions/784 ... o-integers