Циклическая смена атрибутов символов - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Необходимо создать две программы на tasm. К сожалению сам я в низкоуровневых языках вообще никак плюс время поджимает... Только по возможности можно подробные комментарии плз 1. Написать программу циклической смены атрибутов символов (эффект бегущей строки), при этом атрибут символа N на каждом шаге цикла должен соответствовать атрибуту символа N–1 на предыдущем шаге цикле. str – строка для вывода attr – массив атрибутов символов

Решение задачи: «Циклическая смена атрибутов символов»

textual
Листинг программы
org 100h
jmp start
 
mess  db  'Assembler for ever! FASM code. 17.04.2016'
len   =   $ - mess           ; длина строки
free  =   160 - (len*2)      ; свободно в строке байт
 
start:
   mov   ax,3             ;
   int   10h              ;
   push  0B800h           ;
   pop   es               ;
   xor   di,di            ;
   mov   bx,7             ; 7 повторов (кол-во ярких цветов)
   mov   ah,0Fh           ; начальный цвет символа
print:                    ;
   push  ax               ;    ^..запомним его
   mov   si,mess          ;
   mov   cx,len           ;
cycle:                    ;
   lodsb                  ;
   stosw                  ; выводим символ на экран
   call  sleep            ; пауза..
   inc   ah               ; перебираем все цвета
   cmp   ah,10h           ;     ..мигающие не нужны
   jne   @f               ;
   mov   ah,9             ;       ..тёмные тоже (только яркие)
@@:                       ;
   loop  cycle            ; выводим всю строку..
   add   di,free          ; crlf
   pop   ax               ; снимаем цвет со-стека
   dec   ah               ; сл.атрибут
   dec   bx               ; прошли 7 итераций?
   jnz   print            ;
 
exit:                     ;
   xor   ax,ax            ;
   int   16h              ;
   int   20h              ; выход!
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
sleep:                    ;
   push  ax cx bx         ;
   xor   ax,ax            ;
   int   1Ah              ; цитаем тики
   xchg  dx,bx            ;
   add   bx,3             ; задержа 1/6 сек.
@@:                       ;
   int   1Ah              ;
   cmp   bx,dx            ;
   ja    @b               ;
   pop   bx cx ax         ;
ret                       ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы