15. Команда трансляции по таблице - Tulenenok/_Assembler Wiki

XLAT [адрес]

Эта команда помещает в AL байт из таблицы по адресу DS:BX со смещением относительно начала таблицы, равным AL.

Таблица - массив, который не превышает 256 ключей памяти

Особенности

  • Адрес, указанный в исходном коде, не обрабатывается компилятором и служит в качестве комментария.
  • Если в адресе явно указан сегментный регистр, он будет использован вместо DS (то есть смещение всегда берется из BX, а сегментная часть из указанного регистра)
XLATB   ->    AL = DS:[(E)BX + AL]

Для чего нужна?

Такая команда может использоваться, например, для транслитерации или для перевода 16-ричных чисел в символы (где мы значения от 0 до 9 будем конвертировать в цифры, а значения от 10 до 15 будем конвертировать в буквы от A до F).

Фактически, операция нужна для конвертации по словарю (причем “не линейно, а по массиву”). Мы объявляем целевой массив в памяти, настраиваем на него адреса DS:BX и в AL кладем номер, который хотим из этого массива получить. После этого этот номер подменяется значением из этого массива.

Пример

table	db 100h dup(?)
...
mov	bx, offset table
mov	al, 1Fh
xlat