Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .stack 100h
  3. .186
  4. .data    
  5.     mode        db ?        ;переменная в которую сохраняется видеорежим
  6.     startRow    db 05d      ;начальная строка вывода
  7.     startCol    db 10d      ;начальный столбец вывода
  8.     line        db 60d      ;количество элементов в строке
  9.     startChar   db 'A'      ;начальный символ
  10.     cntChar     db 13d      ;количество символов, или кол-во строк
  11.     i           db ?        ;счетчик выводимой строки
  12.     j           db ?        ;счетчик выводимого столбца
  13. .code    
  14.  
  15. b10mode proc                ;процедура смены видеорежима
  16.                             ;она меняет режим на режим из mode
  17.                             ;и сохраняет текущий режим в mode
  18.     pusha                   ;сохранение значения регистров
  19.  
  20.     mov CL, mode            ;временное сохранение нового режима
  21.  
  22.     mov AH, 0Fh             ;получение текущего режима в mode
  23.     int 10h
  24.     mov mode, AL
  25.  
  26.     mov AH, 00h             ;загрузка нового режима
  27.     mov AL, CL
  28.     int 10h
  29.  
  30.     popa                    ;возврат к старым регистрам
  31.     ret                     ;выход из процедуры
  32. b10mode endp
  33.  
  34. e10display proc             ;процедура вывода символа в AL с
  35.                             ;с аттрибутами в BL
  36.     pusha
  37.  
  38.     mov AH, 09h             ;вызов функции вывода
  39.     mov BH, 00h
  40.     mov CX, 01h
  41.     int 10h
  42.  
  43.     popa
  44.     ret                     ;выход
  45. e10display endp
  46.  
  47. d10cursor proc              ;процедура перемещение курсора
  48.                             ;в позицию DH:DL
  49.     pusha
  50.  
  51.     mov AH, 02h             ;вызов соответсв. процедуры
  52.     mov BH, 00h
  53.     int 10h
  54.  
  55.     popa
  56.     ret                     ;выход
  57. d10cursor endp
  58.  
  59. putc proc                   ;процедура чтение символа с
  60.                             ;клавиатуры
  61.     pusha
  62.  
  63.     mov AH, 10h             ;вызов соответ. процедуры
  64.     int 16h
  65.  
  66.     popa
  67.     ret                     ;выход
  68. putc endp
  69.  
  70. start:  
  71.     mov AX, @data
  72.     mov DS, AX
  73.  
  74.     mov mode, 03h           ;помещаем в mode новый режим
  75.     call b10mode            ;устанавливаем новый режим
  76.  
  77.     mov AL, cntChar         ;считаем кол-во выводимых символов
  78.     mul line
  79.     mov CX, AX              ;записываем результат в регистр CX
  80.  
  81.     mov i, 00h              ;инициализируем строку 00h
  82.     mov j, 00h              ;инициализируем столбец 00h
  83.  
  84.     for:                    ;цикл по выводимым символам
  85.         mov DH, i           ;посчитать текущюю строку в DH
  86.         add DH, startRow
  87.  
  88.         mov DL, j           ;посчитать текущий столбец в DL
  89.         add DL, startCol
  90.  
  91.         call d10cursor      ;поместить курсор на место вывода                  
  92.  
  93.         mov AL, startChar   ;посчитать текущий символ в AL
  94.         add AL, i
  95.  
  96.         mov BL, i           ;посчитать текущий аттрибут в BL
  97.         inc BL
  98.  
  99.         call e10display     ;вывести символ и аттрибут
  100.        
  101.         inc j               ;увеличить счетчик столбца
  102.  
  103.         mov AL, j           ;скопировать счетчик столбца в AL
  104.         cmp AL, line        ;если число выведенных символов
  105.         je nline            ;равно числу символов в строке то переход к новой строке
  106.         jmp nextstep        ;иначе переход к следующему шагу
  107.         nline:              ;переход к новой строке
  108.             inc i           ;счетчик строки увеличить на 1
  109.             mov j, 0        ;счетчик столбца установить 0
  110.         nextstep:           ;следующий шаг
  111.     loop for
  112.  
  113.     call putc               ;чтение символа с клавиатуры
  114.     call b10mode            ;переход к старому режиму сохраненному в mode
  115.  
  116.     mov AX, 4C00h           ;выход
  117.     int 21h
  118. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement