Лекция №8. Массивы, структуры, записи, объединения
Команда:
XLAT адрес
XLATB
Назначение:
Трансляция в соответствии с таблицей
Помещает в AL байт из таблицы в памяти по адресу ES:BX (или ES:EBX) со смещением относительно начала таблицы, равным AL.
В качестве аргумента для XLAT в ассемблере можно указать имя таблицы, но эта информация никак не используется процессором и служит только как комментарий. Если этот комментарий не нужен, можно применить форму записи XLATB.
Пример: Преобразовать шестнадцатеричное число в ASCII-код соответствующего ему символа:
htable db "0123456789ABCDEF"
….
После выполнения команды xlat, регистр AL будет содержать не число 0Сh, а ASCII-код буквы «С».
Пример 3:Заполнить массив из 30-ти элементов размером в байт значениями индексов. Вывести массив на экран в одну строку, учитывая, что элементы массива максимум двухзначные числа.
.386
.model flat, stdcall
includelib import32.lib
extrn ExitProcess:PROC
extrn MessageBoxA:PROC
.data
Ttl db 'Massiv',0h
mas db 30 dup (?) ; 32 элементов массива + 10 символов +переходы на
; следующую строчку 2 байта 0ah,0dh
db 0ah
mes1 db 'Massiv: ',0ah,0dh
masVivod db 85 dup (?) ; 10 элементов массива + 10 символов +переходы на
; Ставим после числа символ «;» и наращиваем индексы
met3:
inc esi
mov masVivod[esi],';'
inc esi
inc edi
loopnz go1
mov masVivod[esi],0h
;вывод на экран получившегося массива
push 0h
push offset Ttl
push offset mes1
push 0h
call MessageBoxA
push 0h
call ExitProcess
end start
Результат:
Пример 5: Вывести в одну строку все значения элементов массива, учитывая, что значения элементов массива могут быть трёхзначными и имеют размер в один байт. Значение элементов массива сформировать как i*k, i=k.
.386
.model flat, stdcall
includelib import32.lib
extrn ExitProcess:PROC
extrn MessageBoxA:PROC
.data
Ttl db 'Massiv',0h
mas db 30 dup (?) ; 32 элементов массива + 10 символов +переходы на
; следующую строчку 2 байта 0ah,0dh
mes1 db 'Massiv: ',0ah,0dh
masVivod db 85 dup (?) ; 10 элементов массива + 10 символов +переходы на
; следующую строчку 2 байта 0ah,0dh
i db 0
k db 0
N db 16 ; Максимальное значение элемента массива 15*15=225
Самостоятельно на практике:Вывести все значения элементов массива в несколько строк. В каждой строке должно быть по 5 элементов массива. Значения элементов массива могут быть трёхзначными размером в байт.
Все элементы массива располагаются в памяти компьютера последовательно и то, как трактовать данную последовательность решает программист.
Одну и ту же область памяти можно трактовать как одномерный массив, и одновременно те же самые данные могут трактоваться как двумерный массив. Все зависит только от алгоритма обработки этих данных в конкретной программе.
Эти же соображения можно распространить и на индексы элементов массива.
Наример, в программе статически определена последовательность данных: