2010-10-03 4 views
0

Я застрял писать свою программу Вот что я хотел, чтобы это сделать:MASM сравнить неинициализированные буфера

  1. дисплея приветственного сообщением в консоли
  2. Дождитесь пользователем Imput числа от 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) он показывает мне точное значение я положил в. Так почему же он не работает?

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

+0

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

+0

Я бы предложил использовать NASM, у него гораздо более четкий синтакс. – ruslik

ответ

2

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

cmp al, '0' 

-или-

cmp al, 48 

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

+0

Спасибо !, которые работали #solved # – Rick

+0

@Rick Не забудьте принять ответ. –

+0

@Jens Bjornhager, Done – Rick

1

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

+0

Нет, в MASM оригинальная нотация верна. – atzz

+0

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

Смежные вопросы