Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 100h
- .186
- .data
- mode db ? ;переменная в которую сохраняется видеорежим
- startRow db 05d ;начальная строка вывода
- startCol db 10d ;начальный столбец вывода
- line db 60d ;количество элементов в строке
- startChar db 'A' ;начальный символ
- cntChar db 13d ;количество символов, или кол-во строк
- i db ? ;счетчик выводимой строки
- j db ? ;счетчик выводимого столбца
- .code
- b10mode proc ;процедура смены видеорежима
- ;она меняет режим на режим из mode
- ;и сохраняет текущий режим в mode
- pusha ;сохранение значения регистров
- mov CL, mode ;временное сохранение нового режима
- mov AH, 0Fh ;получение текущего режима в mode
- int 10h
- mov mode, AL
- mov AH, 00h ;загрузка нового режима
- mov AL, CL
- int 10h
- popa ;возврат к старым регистрам
- ret ;выход из процедуры
- b10mode endp
- e10display proc ;процедура вывода символа в AL с
- ;с аттрибутами в BL
- pusha
- mov AH, 09h ;вызов функции вывода
- mov BH, 00h
- mov CX, 01h
- int 10h
- popa
- ret ;выход
- e10display endp
- d10cursor proc ;процедура перемещение курсора
- ;в позицию DH:DL
- pusha
- mov AH, 02h ;вызов соответсв. процедуры
- mov BH, 00h
- int 10h
- popa
- ret ;выход
- d10cursor endp
- putc proc ;процедура чтение символа с
- ;клавиатуры
- pusha
- mov AH, 10h ;вызов соответ. процедуры
- int 16h
- popa
- ret ;выход
- putc endp
- start:
- mov AX, @data
- mov DS, AX
- mov mode, 03h ;помещаем в mode новый режим
- call b10mode ;устанавливаем новый режим
- mov AL, cntChar ;считаем кол-во выводимых символов
- mul line
- mov CX, AX ;записываем результат в регистр CX
- mov i, 00h ;инициализируем строку 00h
- mov j, 00h ;инициализируем столбец 00h
- for: ;цикл по выводимым символам
- mov DH, i ;посчитать текущюю строку в DH
- add DH, startRow
- mov DL, j ;посчитать текущий столбец в DL
- add DL, startCol
- call d10cursor ;поместить курсор на место вывода
- mov AL, startChar ;посчитать текущий символ в AL
- add AL, i
- mov BL, i ;посчитать текущий аттрибут в BL
- inc BL
- call e10display ;вывести символ и аттрибут
- inc j ;увеличить счетчик столбца
- mov AL, j ;скопировать счетчик столбца в AL
- cmp AL, line ;если число выведенных символов
- je nline ;равно числу символов в строке то переход к новой строке
- jmp nextstep ;иначе переход к следующему шагу
- nline: ;переход к новой строке
- inc i ;счетчик строки увеличить на 1
- mov j, 0 ;счетчик столбца установить 0
- nextstep: ;следующий шаг
- loop for
- call putc ;чтение символа с клавиатуры
- call b10mode ;переход к старому режиму сохраненному в mode
- mov AX, 4C00h ;выход
- int 21h
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement