ХАНДЫФАР

Инструкция XLAT


Выполнить поиск в таблице с помощью регистров AL и BX


XLAT - Установить AL в байт памяти DS:[BX + беззнаковый AL].


Находит байтовую запись в таблице в памяти, используя содержимое регистра al в качестве индекса таблицы, затем копирует содержимое записи таблицы обратно в регистр al. Индекс в регистре al обрабатывается как целое число без знака. Инструкция xlat получает базовый адрес таблицы в памяти из регистра ds:bx. Сегмент ds может быть переопределен префиксом переопределения сегмента.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____table db_"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. data ends
  7. code segment public
  8. ____assume ds:data, cs:code
  9. ____main proc
  10. ________mov_____ax, seg data
  11. ________mov_____ds, ax
  12. ________mov_____al, 3
  13. ________lea_____bx, ds:[table]
  14. ________xlat
  15. ________mov_____ax, 4C00h
  16. ________int_____21h
  17. ____main endp
  18. code ends
  19. end main

Пользовательская таблица кодирования для преобразования данных.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____encoding db 10h, 20h, 30h, 40h, 50h, ________________60h, 70h, 80h
  6. ____input____db 2, 4, 6
  7. ____output___db 3 dup(0)
  8. data ends
  9. code segment public
  10. ____assume ds:data, cs:code
  11. ____main proc
  12. ________mov_____ax, seg data
  13. ________mov_____ds, ax
  14. ________lea_____bx, ds:[encoding]
  15. ________lea_____si, ds:[input]
  16. ________lea_____di, es:[output]
  17. ________mov_____cx, 3
  18. ____EncodeLoop:
  19. ________lodsb
  20. ________xlat
  21. ________stosb
  22. ________loop____EncodeLoop
  23. ________mov_____ax, 4C00h
  24. ________int_____21h
  25. ____main endp
  26. code ends
  27. end main

Инструкция XLAT


Выполнить поиск в таблице с помощью регистров AL и BX


XLAT - Установить AL в байт памяти DS:[BX + беззнаковый AL].


Находит байтовую запись в таблице в памяти, используя содержимое регистра al в качестве индекса таблицы, затем копирует содержимое записи таблицы обратно в регистр al. Индекс в регистре al обрабатывается как целое число без знака. Инструкция xlat получает базовый адрес таблицы в памяти из регистра ds:bx. Сегмент ds может быть переопределен префиксом переопределения сегмента.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____table db_"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. data ends
  7. code segment public ____________; Начало сегмента кода
  8. ____assume ds:data, cs:code
  9. ____main proc __________________; Начало процедуры main
  10. ________mov_____ax, seg data____; Получаем адрес сегмента памяти данных и сохраняем его в ax
  11. ________mov_____ds, ax__________; Передаём адрес сегмента памяти данных из регистра ax в ds
  12. ________mov_____al, 3___________; Копируем значение 3 в регистр al
  13. ________lea_____bx, ds:[table]__; Загружаем адрес переменной table в ds:bx
  14. ________xlat____________________; Выполняем поиск значения в регистре al в таблице table
  15. ________mov_____ax, 4C00h_______; Копируем значение функции завершения процесса в ah а значение в al
  16. ________int_____21h ____________; Вызываем прерывание DOS
  17. ____main endp __________________; Конец процедуры main
  18. code ends ______________________; Конец сегмента кода
  19. end main _______________________; Конец файла. Точкой входа указывается процедура main

Пользовательская таблица кодирования для преобразования данных.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____encoding db 10h, 20h, 30h, 40h, 50h, 60h, 70h, 80h
  6. ____input____db 2, 4, 6
  7. ____output___db 3 dup(0)
  8. data ends
  9. code segment public _______________; Начало сегмента кода
  10. ____assume ds:data, cs:code
  11. ____main proc _____________________; Начало процедуры main
  12. ________mov_____ax, seg data_______; Получаем адрес сегмента памяти данных и сохраняем его в ax
  13. ________mov_____ds, ax_____________; Передаём адрес сегмента памяти данных из регистра ax в ds
  14. ________lea_____bx, ds:[encoding]__; Загружаем адрес переменной encoding в ds:bx
  15. ________lea_____si, ds:[input]_____; Загружаем адрес переменной input в ds:si
  16. ________lea_____di, es:[output]____; Загружаем адрес переменной output в es:di
  17. ________mov_____cx, 3
  18. ____EncodeLoop:
  19. ________lodsb______________________; Загружаем байт по адресу ds:si в регистр al
  20. ________xlat_______________________; Преобразовуем байт с использованием таблицы кодировок
  21. ________stosb______________________; Копируем из al в es:di увеличивая di на 2
  22. ________loop____EncodeLoop_________; Выполняем цикл пока CX≠0
  23. ________mov_____ax, 4C00h__________; Копируем значение функции завершения процесса в ah а значение в al
  24. ________int_____21h _______________; Вызываем прерывание DOS
  25. ____main endp _____________________; Конец процедуры main
  26. code ends _________________________; Конец сегмента кода
  27. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda