Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 12:40   #1
Alyonka_v
Пользователь
 
Регистрация: 05.12.2007
Сообщений: 11
По умолчанию Как убрать мусор до строки

Здравствуйте! Я только начала изучать ассемблер, использую компилятор 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
Alyonka_v вне форума Ответить с цитированием
Старый 13.09.2009, 13:07   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Наверно как-то так.
Код:
.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 dx,offset StringBuffer
              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]
              shr al,1 ; деление на 2
              mov dh,13
              mov dl,al
              mov ah, 02h                  ;перемещение курсора в выбранную позицию на экране
              int 10h
              mov bh, 0            
              mov bl, StringBuffer[1]      ;ограничительный символ $ поместить в конец введенной строки 
              mov bh, 0
              add bx, 2
              mov StringBuffer[BX], '$'
              mov dx,offset StringBuffer[2]
              mov ah, 09h                  ;вывод строки на экран 
              int 21h                     
              mov ah, 0                    ;пауза до нажатия любой клавиши
              int 16h
              mov ah, 4Ch                  ;завершение работы программы
              int 21h
END ProgramStart
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 13.09.2009, 13:28   #3
Alyonka_v
Пользователь
 
Регистрация: 05.12.2007
Сообщений: 11
По умолчанию

Спасибо огромное!
Alyonka_v вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
убрать строки из файлов france@ PHP 7 09.02.2009 20:18
Убрать пробелы из строки Neymexa Помощь студентам 2 09.12.2008 14:29
Убрать пробелы из строки Neymexa Общие вопросы по Java, Java SE, Kotlin 2 29.11.2008 11:03
вместо номера телефона выводится на экран какой-то мусор le_den Общие вопросы C/C++ 2 25.11.2008 20:45
Как убрать перевод строки? Biowulf86 Помощь студентам 2 25.03.2008 11:05