Юл
Юлия

Помогите, что не так? прога в ассемблере

Задание: Разработать программу, ввода стоковых данных с клавиатуры. Запретить ввод пробела в строку.
Вот код. Помогите исправить ошибки

.MODEL small ;отводим под стек и под данные по 64Кб
.STACK 100h ;отмечаем начало сегмента стека
.DATA ;отмечаем начало сегмента данных
NL db 0Ah, 0Dh, '$'
Buf DB 255, 0, 256 DUP (0) ;

.CODE ;отмечаем начало сегмента кодов
main PROC
mov ax,@data ;копируем адрес
mov ds,ax ;сегмента данных
mov dx,offset Buf ;считываем строку с клавиатуры
mov ah,0Ah
int 21h
xor cx,cx
mov al,[Buf+1] ;если считано 0 байт, то выход из
mov cl,al ;задаем количество повторений (длина строки)
test al,al ;программы
jz Exit
mov ah,09h
mov dx,offset NL ; перейти на следующую строку
int 21h
mov si,offset Buf+2
Cycle:
mov dl,[si] ;считать символ
cmp dl,' ' ;сравнить с пробелом
jne Print ;если не пробел - вывести
jmp Space ;пропустить код вывода - пробел не выводим
Print:
cmp dl,' '
jne Print
Space:
inc si ;перейти к следующему символу
loop Cycle

Exit:
mov AX,4C00h ;выход
int 21h ;из программы
main ENDP

END main

Каламкас
Каламкас

Если нужно именно ЗАПРЕТИТЬ ввод пробела - скорее всего имеется в виду, что чтение нужно производить посимвольно и если введён пробел - игнорировать.

Примерно так
Читаем символ. Если пробел возврат, если ввод переход на обработку, если backspace и если число введённых символов>0 сдвигаемся обратно. Кст. печать символа backspace через DOS функции сдвигает курсор обратно на сколько я помню.

Для этого можно использовать функции
ah=07h int 21h (прерывание DOS, чтение клавиатуры с ожиданием без вывода на экран)
или
ah=0 int 16h (аналогичное прерывание BIOS)

В любом случае (даже если запрет - это пробел ввести можно, но потом после ввода проанализировать есть ли он - как Вы пробовали писать) :
Не читайте данные из строк как делаете. Это медленно и громоздко. Используйте lodsb
Подробнее: http://www.firststeps.ru/asm/r.php?47

Так-же почитайте про scasb и repe
repne scasb н-р может искать в строке заданный символ
http://helpsite.narod.ru/asm/386/123.htm

Если что - пишите на почту.

Похожие вопросы
Ассемблер. помогите решить!!!
Люди, помогите с Ассемблером!!!
Помогите с ассемблером
Разработать с помощью ассемблера прогу.
Помогите решить задачу по ассемблеру
помогите написать программу в с++ или на ассемблере
запускаю прогу выдаёт ошибку ассемблер +
Ассемблер
Помогите по ассемблеру
Помогите с ассемблером