Хобрук: Ваш путь к мастерству в программировании

MASM сравнивает неинициализированные буферы

Я застрял в написании своей программы. Вот что я хотел:

  1. отображать приветственное сообщение внутри консоли
  2. Подождите, пока пользователь введет число от 0 до 9]
  3. сравните это число с 0
  4. вывести сообщение, если оно есть, иначе выйти

Вот что у меня есть на данный момент:

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

.data
capt db "SCHiM says: ",0
txt       db "Enter a number 0-9:",0

.data?

data db ?

.code

start:


call AllocConsole

push offset txt
call StdOut

push 1
push offset data
call StdIn

mov al, data

cmp al, 0h
jz eqzero

invoke ExitProcess, NULL

eqzero:

push offset capt
call StdOut
push offset data
call StdOut

endloop:
jmp endloop

invoke ExitProcess, NULL
end start 

Программа прекрасно компилируется и линкуется без каких-либо предупреждений или ошибок. Но cmp всегда возвращает 1, если я печатаю значение в данных (с помощью StdOut), оно показывает мне точное значение, которое я ввел. Так почему же это не работает?

заранее спасибо

03.10.2010

  • Что такое StdIn и StdOut? Это макросы или функции из дистрибутива MASM? У меня нет под рукой современного дистрибутива MASM, чтобы проверить. 03.10.2010
  • Я бы предложил использовать NASM, у него гораздо более понятный синтаксис. 03.10.2010

Ответы:


1

Попробуй это:

cmp al, '0'

-or-

cmp al, 48

Почему? Поскольку вас интересует символ «0», а не числовой 0. В большинстве кодировок символ «0» кодируется как 48.

03.10.2010

2

Вероятно, вы каким-то образом перемещаете адрес data в al. Попробуйте mov al, [data] получить значение, хранящееся в data.

03.10.2010
  • Ваше решение не действует, моя программа по-прежнему не работает. Я также запускал ее, хотя ollydbg (отладчик) я вижу эту строку, каким-то образом значение, хранящееся в al, равно 01 вместо 00 0040101B |. A0 30304000 MOV AL,BYTE PTR DS:[403030] ps: извините за ужасный формат моих сообщений, я не привык к тому, как stackoverflow оборачивает текст 03.10.2010
  • Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..