Как убрать мусор до строки

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Alyonka_v
Сообщения: 4
Зарегистрирован: 13 сен 2009, 12:59

Здравствуйте! Я только начала изучать ассемблер, использую компилятор Tasm (настоятельно рекомедовал преподаватель). Попыталась сделать задание: "запросить с клавиатуры строку символов (не более 80 символов) и вывести ее в центе экрана (y = 13, x = (80 – L)/2, где L – количество символов в строке) ", но до строки выводит еще кучу всяких символов=( Подскажите, пожалуйста, что нужно исправить, чтобы программа работала корректно.

Код: Выделить всё

.MODEL small
.STACK 200h
.DATA
StringBuffer  DB  80, ?, 81 dup (?)
.CODE
ProgramStart: mov ax, @DATA 
              mov ds, ax
              mov ah, 0Fh                  ;определение номера текущего видеорежима
              int 10h
              mov ah, 00h                  ;устанавливание видеорежима с тем же номером как и текущий  
              int 10h
              mov ah, 0ah                  ;запрашивание у пользователя строки
	      int 21h
              mov ah, 0Fh                  ;очистка экрана
              int 10h                  
              mov ah, 00h                   
              int 10h                        
              mov ax, 80                   ;координата X для выводимой строки – x =(80-L)/2
              sub AL, StringBuffer[1]
              mov bl, 2
              div BL
              mov ah, 02h                  ;перемещение курсора в выбранную позицию на экране
              int 10h
              mov bh, 0            
              mov bl, StringBuffer[1]      ;ограничительный символ $ поместить в конец введенной строки 
              mov bh, 0
              add bx, 2
              mov StringBuffer[BX], '$'
              mov ah, 09h                  ;вывод строки на экран 
              int 21h                     
              mov ah, 0                    ;пауза до нажатия любой клавиши
              int 16h
              mov ah, 4Ch                  ;завершение работы программы
              int 21h
END ProgramStart
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Alyonka_v,
При вызове функций ввода и вывода не устанавливается адрес строки. Пoтому читается "абы куда" и на экран выводится "абы откуда".

Код: Выделить всё

mov ah, 0ah                  ;запрашивание у пользователя строки
Mov DX, offset StringBuffer   ; <-- !!!!!!!
int 21h
Вывод:

Код: Выделить всё

mov ah, 09h                  ;вывод строки на экран 
Mov DX, offset StringBuffer [2]  ; <-- !!!!!!!
int 21h
Ds уже установлен в самом начале программы.
Alyonka_v
Сообщения: 4
Зарегистрирован: 13 сен 2009, 12:59

Спасибо огромное
Ответить