Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Очистка экрана или переход на новую страницу!


Автор: kuller 19.5.2009, 18:59
Здравствуйте!

сталкнулся с такой проблемой:
выводил строки на экран и дошел до самой нижней и ДОПУСТИМ хочу вывести следующую строчку на 1 строку ниже, ну так вот  ВОПРОС:

как сделать чтобы ПРОКРУТИЛАСЬ страница и строка вывелась как бы на самой верхней строчке монитора или как ОЧИТСТЬ весь экран, чтобы затем выводить опять же на 1 строчке монитора мою строку???

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

Автор: ФедосеевПавел 19.5.2009, 19:37
Очистить экран
Код

  mov   ah, 06h     ;прокрутка экрана вверх
  mov   al, 00h    ;количество прокручиваемых строк. но если 00h - то весь экран
  mov   bh, 07h     ;цвет закрашиваемого экрана - белые символы на черном фоне
  mov   cx, 0000h  ;Координаты прокрутки от 00, 00
  mov   dx, 184Fh  ; до 24, 79 (весь экран)
  int     10h

Автор: kuller 19.5.2009, 19:45
ФедосеевПавел, Спасибо! я уже сам до этого ДОШЕЛ))) (только я крутил ВНИЗ при помощи 07h)

а еще не подскажите как исправить ОШИБКУ вот такого типа:

Relative jump out of range by 0092h bytes

Автор: ФедосеевПавел 19.5.2009, 20:15
Условные переходы jxx позволяют перейти лишь на 128 байт взад-вперед (в 16-разрядных программах).
Решение - изменение условия на противоположное и ещё один jmp. Но лучше изменить структуру программы.
Код

  jz   @@MyLbl
заменить на
  jnz  @@1
  jmp @@MyLbl
@@1:

Автор: kuller 19.5.2009, 20:33
ФедосеевПавел, что то я не понял как это будет работать!!

было:
jz   @@MyLbl
т.е. ЕСЛИ НОЛЬ то перейти на метку @@MyLbl

а стало:
jnz  @@1
  jmp @@MyLbl
@@1:
т.е. ЕСЛИ НЕ НОЛЬ, то перейти на метку @@1.

Как тогда оно работает если допустим ВСЕТАКИ НОЛЬ, то переход на @@MyLbl, так за счет чего тут УВЕЛИЧЕНИЕ байт взад-вперед???

 
ФедосеевПавел, если не сложно, могли бы по подробнее рассказать???

Автор: kuller 19.5.2009, 21:12
Решил этот вопрос НАТЫКАВ в программу ПРОЦЕДУР, тем самым уменьшил расстояния до метак перехода))
p.s. может это и не правильно, но зато работает!

Автор: ФедосеевПавел 19.5.2009, 22:44
Код

  jz   @@MyLbl
заменить на
  jnz  @@1
  jmp @@MyLbl
@@1:

Было - если 0, то перейти на @@MyLbl.
Стало - если не ноль, то "перепрыгнуть" через следующую команду. А следующая команда - переход на @@MyLbl. Т.е. когда будет 0, то условие перехода не выполнится и будет выполняться следующая за jnz команда - jmp, которая и отправит на нужную метку @@MyLbl.

Автор: Mikl_ 20.5.2009, 04:03
ФедосеевПавел, для очистки экрана и перехода на новую строку в текстовом режиме достаточно mov ax,3/int 10h

Автор: kuller 20.5.2009, 09:22
Mikl_, Спасибо!!!
и этот вариант работает!
Код

        mov ax,3
        int 10h

Автор: ФедосеевПавел 20.5.2009, 18:22
Mikl_, Спасибо. Теперь и я буду знать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)