ВУЗ:
Составители:
18
Теперь сформулируем задачу. Пусть дана последовательность байтов (строка в
терминологии МП 8086), содержащая десятичные цифры. Получить другую строку,
содержащую кодировку этих цифр кодом «2 из 5». Пример:
Исходная строка 2 4 2 1 9 4
Закодированная строка 5 9 5 3 20 9
Программа для учебной модели AsmEd приведена ниже. Здесь использован
«обходной путь» - имитация работы команд LODS, STOS с помощью MOV, INC и
косвенной (индексной) адресации. Сделано это в качестве учебного упражнения.
Предоставляем читателям возможность самостоятельно составить аналог этой программы
с использованием LODS, STOS.
MOV SI, 50h ; начальное значение указателя на исх. строку
MOV DI, 60h ; начальное значение указателя на строку-результат
MOV CX, 6 ; начальное значение счётчика цикла
MOV BX, 0 ; смещение таблицы перекодировки для XLAT
MET: ; начало цикла
MOV AL, DS:[SI] ; загрузка в AL обрабатываемого байта
XLAT ; команда перекодировки
MOV DS:[DI], AL ; запись в память обработанного байта
INC SI ; продвижение указателей на
INC DI ; строку-источник и строку-результат
LOOP MET ; переход на начало цикла, если СХ не равен нулю
HLT
Исходные данные для работы программы.
1) Исходная строка «242194» длиной 6 байт заносится до начала работы программы
в память, представленную сегментом DS, начиная с адреса 0050h. Для этого следует:
• переключиться в сегмент DS;
• установить курсор на ячейку памяти с адресом 0050h;
• нажать сочетание клавиш Shift - Enter;
• ввести первый байт строки, т.е. набрать «2» и нажать Enter;
• переместить курсор на следующую ячейку памяти;
• повторять описанные действия до ввода всей строки.
2) Таблица перекодировки для работы команды XLAT должна располагаться с
адреса, размещаемого в DS:BX (в некоторых версиях программы AsmEd она
располагается в ES:BX). Для ввода таблицы следует переключиться в сегмент DS (или,
соответственно, в ES), установить курсор на ячейку памяти с адресом 0000h и, нажимая
Shift-Enter, ввести байт за байтом значения из столбца № 4 Таблицы 7.
Теперь программу можно запустить. После окончания её работы мы увидим в
сегменте памяти DS две строки: одна начинается с адреса 0050h и содержит исходные
данные, вторая - с адреса 0060h и содержит результат перекодировки.
18 Теперь сформулируем задачу. Пусть дана последовательность байтов (строка в терминологии МП 8086), содержащая десятичные цифры. Получить другую строку, содержащую кодировку этих цифр кодом «2 из 5». Пример: Исходная строка 2 4 2 1 9 4 Закодированная строка 5 9 5 3 20 9 Программа для учебной модели AsmEd приведена ниже. Здесь использован «обходной путь» - имитация работы команд LODS, STOS с помощью MOV, INC и косвенной (индексной) адресации. Сделано это в качестве учебного упражнения. Предоставляем читателям возможность самостоятельно составить аналог этой программы с использованием LODS, STOS. MOV SI, 50h ; начальное значение указателя на исх. строку MOV DI, 60h ; начальное значение указателя на строку-результат MOV CX, 6 ; начальное значение счётчика цикла MOV BX, 0 ; смещение таблицы перекодировки для XLAT MET: ; начало цикла MOV AL, DS:[SI] ; загрузка в AL обрабатываемого байта XLAT ; команда перекодировки MOV DS:[DI], AL ; запись в память обработанного байта INC SI ; продвижение указателей на INC DI ; строку-источник и строку-результат LOOP MET ; переход на начало цикла, если СХ не равен нулю HLT Исходные данные для работы программы. 1) Исходная строка «242194» длиной 6 байт заносится до начала работы программы в память, представленную сегментом DS, начиная с адреса 0050h. Для этого следует: • переключиться в сегмент DS; • установить курсор на ячейку памяти с адресом 0050h; • нажать сочетание клавиш Shift - Enter; • ввести первый байт строки, т.е. набрать «2» и нажать Enter; • переместить курсор на следующую ячейку памяти; • повторять описанные действия до ввода всей строки. 2) Таблица перекодировки для работы команды XLAT должна располагаться с адреса, размещаемого в DS:BX (в некоторых версиях программы AsmEd она располагается в ES:BX). Для ввода таблицы следует переключиться в сегмент DS (или, соответственно, в ES), установить курсор на ячейку памяти с адресом 0000h и, нажимая Shift-Enter, ввести байт за байтом значения из столбца № 4 Таблицы 7. Теперь программу можно запустить. После окончания её работы мы увидим в сегменте памяти DS две строки: одна начинается с адреса 0050h и содержит исходные данные, вторая - с адреса 0060h и содержит результат перекодировки.