Пересылка данных с помощью команды 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-код соответствующего ему символа: