КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример. Вывод горизонтальной линии.mov CX, 10 m1: mov AH, 14 mov AL, 196 ; ASCII код '-' mov BH, 0 int 10h loop m1 Пример. Вывод горизонтальной линии со сменой атрибута. Желтые символы на синем фоне. mov AH, 9 mov BH, 0 ; текущая страница mov CX, 15 mov AL, '=' ; выводимый символ mov BL, 0001111Ob int 10h При описании переменных в сегменте данных данные можно описывать с помощью псевдооператоров DB, DW, DD. Например: A DB 1, 2, 3, 4 B DW 1122h,344h C DD 11223344h, 55667788h Если требуется работа с байтами, то обращение к ним осуществляется с помощью оператора byte ptr: mov AL, A ; AL = 1 mov AL, byte ptr B ; AL = 22h mov AL, byte ptr C ; AL = 44h Во втором и третьих примерах в регистр AL будут записаны младшие байты слов и двойных слов. Для обращения к старшим байтам нужно к адресу добавить необходимое смещение: mov AL, byte ptr B+1 ; AL = 11 mov AL, byte ptr C+3 ; AL = 11 Если требуется работа со словами, то обращение к ним осуществляется с помощью оператора word ptr: mov AX, word ptr A ; AX = 0201h mov AX, B ; AX = 1122h mov AX, word ptr C ; AX = 3344h При обращении к старшим словам нужно к адресу добавить смещение для слов (кратное 2): mov AX, word ptr C+2 ; AX = 1122h В программах могут использоваться константы, которые описываются с помощью псевдооператоров EQU или " = " ; в сегменте данных К EQU 255 A DB ? ; в сегменте кода mov A, K В данном случае второй операнд является непосредственным, а первый операнд указывает адрес. Массивы можно задавать следующим образом: mas_A DB 1, 2, 3, 4, 5, 6, 7, 8, 9 mas_B DB 31h, 32h, ..., 39h mas_C DB '1, 2, 3, 4, 5, 6, 7, 8, 9' ; данный массив занимает в памяти 17 байтов, ;т.к. включает в себя разделители (запятые) mas_D DB 1B, 10B, 11B, 100B, 101B, 110B, 111B, 1000B ; Массив задан ; в двоичном коде Массивы, заданные в двоичном и десятичном виде, перед выдачей на экран необходимо преобразовать в ASCII-коды. mov AL, 2 mov DL, mas[SI] add DL, 30h ; получение ASCII - кода int 21h Текстовые строки эадаются в ASCII-кодах, т.е. обязательно заключаются в кавычки. string_A DB 'При использовании функции 9' DB 'INT 21h текстовая строка', 10, 13 DB 'Должна заканчиваться символом ' DB 'доллара $' string_B DB 'При использовании функции 40h' DB 'INT 21h конец текстовой строки', 10, 13 DB 'Определяется по счетчику $ ' При выводе рамки на дисплей ее можно описать в сегменте данных в виде текстовой строки: RAMKA DB 10,13, 10 DUP (20h), ' ' , 10, 13 DB 10 DUP (20h), ' ' , 10, 13 DB 10 DUP (20h), ' ', 10, 13 DB 10 DUP (20h), ' $' или RAMKA DB 10, 13, 10 DUP (20h), 218, 8 DUP (196), 191 DB 10, 13, 10 DUP (20h), 179, 8 DUP (20h), 179 DB 10, 13, 10 DUP (20h), 179, 8 DUP (20h), 179 DB 10, 13, 10 DUP (20h), 192, 8 DUP (196), 217, '$' ASCII - коды псевдографики для рисования рамок:
При выводе символа на дисплей в регистр DL (функция 2 INT 21h) загружается ASCII-код символа: mov DL, 41h ; ASCII-код символа 'A' или mov DL, 'A' Пример. sseg segment DB 128 dup (?) sseg ends data segment string DB 'текстовая строка' stringln EQU $-string data ends code segment assume DS:data, SS:sseg, CS:code start: mov AX, data mov DS, AX ; вывод строки на экран mov AH, 40h mov BH, 1 mov CX, stringln lea DX, string int 21h ; завершение программы mov AH, 4ch int 21h code ends end start
|