Методическое пособие по решению задач лабораторного практикума по курсу "ЭВУ и системы" (изучение архитектуры и системы команд INTEL-совместимых микропроцессоров). Коршунов А.Д. - 18 стр.

UptoLike

Составители: 

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 и содержит результат перекодировки.