NASM – преобразование пользовательского ввода в целые числа [дубликат]Linux

Ответить
Anonymous
 NASM – преобразование пользовательского ввода в целые числа [дубликат]

Сообщение Anonymous »

Я хочу, чтобы вводимые пользователем данные сравнивались с переменной «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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»