Пересылка данных с помощью команды xlat
Эта функция посылает символ из регистра DL на устройство стандартного вывода.
Лекция №10. Работа с массивами.
Endm
Rept 5
Mas_w label word
Mas_b label byte
dw 0flf0h ; f0 f1 f0 f1 f0 f1 f0 f1 f0 f1
В результате в памяти будет создана последовательность из пяти слов f1f0. Эту последовательность можно трактовать как массив байт или слов в зависимости от того, какое имя области будет использоваться в программе — mas_b или mas_w;
4. использованием цикла для инициализации значениями области памяти, которую можно будет впоследствии трактовать как массив. Например: инициализация массива в цикле:
Стандартным устройствам ввода-вывода по умолчанию присваиваются свои описатели - от 0 до 4. Вот эти описатели:
● STDIN стандартное устройство ввода (клавиатура) - 0,
● STDOUT стандартное устройство вывода (экран) -1,
● STDERR устройство для вывода ошибок (обычно экран) - 2,
● AUX асинхронный порт(СОМ1) - 3,
● PRN печатающее устройство (LPT1) - 4.
Функция 02h – вывод символа на STDOUT с проверкой на Ctrl+Break
Вход: | АН | 02h |
DL | символ, выводимый на устройство стандартного вывода | |
Выход: | Нет | --- |
В DL можно записать как ASCII-код символа, так сам символ. В последнем случае символ заключается в одинарные кавычки. Если при выполнении этой функции была нажата комбинация клавиш Ctrl+Break, то выполняется прерывание INT 23h, которое по умолчанию осуществляет выход из программы.
Данная функция обрабатывает некоторые управляющие символы:
Выводимый символ | Действие |
BEL (07h) | появляется звуковой сигнал |
BS (08h) | курсор перемещается на одну позицию влево |
НТ (09h) | используется для замены на несколько пробелов |
LF (0Ah) | перевод курсора на одну позицию вниз |
CR (0Dh) | переход на начало текущей строки |
Пример 1: Заполнить массив из 10 элементов размером в байт значениями индексов. Вывести массив на экран в консольном режиме, учитывая, что элементы массива максимум однозначные числа. Программу разработать для DOS16.
;Для DOS16
MASM
MODEL small
STACK 256
.data
mes1 db 0ah,0dh,'Massiv: ',0h
mes2 db '; ',0h
mas db 10 dup (?) ;исходный массив
i db 0
.code
start:
mov ax,@data
mov ds,ax
xor ax,ax ;обнуление ax
mov cx,10 ;значение счетчика цикла в cx
mov si, 0 ;индекс начального элемента в cx
go: ;цикл инициализации
mov bh,i ;i в bh
mov mas[si],bh ;запись в массив i
inc i ;инкремент i
inc si ;продвижение к следующему элементу массива
loop go ;повторить цикл
;вывод на экран получившегося массива
mov cx,10
mov si,0
mov ah,09h
lea dx,mes1
int 21h
show:
mov ah,02h ;функция вывода значения из dl на экран
mov dl,mas[si]
add dl,30h ;преобразование числа в символ
int 21h
mov ah,09h
lea dx,mes2
int 21h
inc si
loop show
exit:
mov ax,4c00h ;стандартный выход
int 21h
end start ;конец программы
----------------------------------------------------------
Команда: | XLAT адрес XLATB |
Назначение: | Трансляция в соответствии с таблицей |
Помещает в AL байт из таблицы в памяти по адресу ES:BX (или ES:EBX) со смещением относительно начала таблицы, равным AL.
В качестве аргумента для XLAT в ассемблере можно указать имя таблицы, но эта информация никак не используется процессором и служит только как комментарий. Если этот комментарий не нужен, можно применить форму записи XLATB.
Пример: Преобразовать шестнадцатеричное число в ASCII-код соответствующего ему символа: