Я хочу, чтобы вводимые пользователем данные сравнивались с переменной «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
NASM – преобразование пользовательского ввода в целые числа [дубликат] ⇐ Linux
1714830511
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
Подробнее здесь: [url]https://stackoverflow.com/questions/78428837/nasm-converting-user-input-to-integers[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия