Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
19
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

Арифметические операции 2: обработка данных в форматах ascii и

 BCD 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.

2. Ввод данных с клавиатуры и вывод информации на экран осуществляется в коде ASCII. Например, число 23 в двоичном представлении выглядит как 00010111 (17Н); в коде ASCII на каждый символ требуется один байт и число 23 в ASCII-коде имеет представление 3233 (два байта), буквы SAM имеют представление 53414D (три байта), число 1234 имеет представление 31323334 (четыре байта).

3. Арифметические операции над числами в ASCII-формате выполняются с помощью следующих ассемблерных команд:

AAA - коррекция для сложения ASCII-кода

AAD - коррекция для деления ASCII-кода

AAM - коррекция для умножения ASCII-кода

AAS - коррекция для вычитания ASCII-кода

Эти команды кодируются без операндов и выполняют автоматическую коррекцию в регистре АХ.

4. Сложение чисел 8 и 4 в ASCII-формате выполняется следующим образом:

38

34

--

6C

Полученная сумма неправильна ни для ASCII-формата, ни для двоичного формата. Однако, прибавляя левую цифру 6 к правой цифре С: С + 6 = 12, получим правильный результат в десятичном формате.

5. Команда ААА проверяет правую шестнадцатиричную цифру (4 бит) в регистре AL. Если эта цифра находится между A и F или флаг CF установлен в 1, то к регистру AL прибавляется 6, а к регистру АН прибавляется 1, флаг CF устанавливается в 1. Во всех случаях команда ААА устанавливает в 0 левую шестнадцатиричную цифру в регистре AL. Результат получается в регистре АХ (0102). Для получения окончательного ASCII-представления ставятся тройки на место левых шестнадцатиричных цифр:

OR AX,3030H

В регистре АХ получается результат 3132.

6. Команда AAS выполняется аналогично команде ААА. Команда AAS проверяет правую шестнадцатиричную цифру в регистре AL. Если эта цифра лежит между A и F или флаг CF равен 1, то из регистра AL вычитается 6, а из регистра АН вычитается 1, флаг CF устанавливается в 1. Во всех случаях команда AAS устанавливает в 0 левую шестнадцатиричную цифру в регистре AL.

7. Команда ААМ выполняет корректировку результата умножения ASCII-кодов в регистре АХ. Полученные данные в результате выполнения команды будут иметь распакованное десятичное представление. Например, число 01020304, полученное в результате выполнения команды ААМ, соответствует числу 31323334 в ASCII-формате. Коррекция выполняется только для одного байта за одно выполнение команды, поэтому для более длинных полей необходима организация цикла. Перед выполнением умножения множимое и множитель должны быть распакованы из ASCII-кода в десятичное представление.

8. Команда AAD выполняет корректировку ASCII-кода делимого до непосредственного деления. Однако, прежде необходимо очистить левые тройки ASCII-кодов для получения распакованного десятичного формата. Команда AAD может оперировать с двухбайтовыми делимыми в регистре АХ. Делитель может быть только однобайтовый.

9. Число в компьютере может быть представлено в различных форматах. Например, число 0924 может быть представлено: 30393234 (0011 0000 0011 1001 0011 0010 0011 0100) - ASCII-формат, 00090204 (0000 0000 0000 1001 0000 0010 0000 0100) - распакованное десятичное представление, 0924 (000 1001 0010 0100) - двоично-десятичный формат (BCD) состоящий из двух байт, 039С - (0000 0011 1001 1100) шестнадцатиричное представление, 0000 0011 1001

1100 - двоичное представление .Длина ASCII-представления - 4 байта, распакованного десятичного представления - 4 байта, двоично-десятичного представления - 2 байта, шестнадцатиричного представления - 2 байта, двоичного представления - 2 байта.

10. Для сложения чисел в двоично-десятичном представлении используется команда DAA (десятичная коррекция для сложения). Для вычитания чисел в двоично-десятичном представлении используется команда DAS (десятичная коррекция для вычитания).

11. Процедура преобразования из ASCII-формата в двоичный формат заключается в следующем:

а) Начинают с самого правого байта числа в ASCII-формате и обрабатывают справа налево.

б) Удаляют тройки из левых шестнадцатиричных цифр каждого ASCII-байта.

в) Умножают ASCII-цифры на 1, 10, 100 (01Н, 0АН, 64Н) и т.д. и складывают результаты.

12. Для примера рассмотрим преобразование числа 1234 из ASCII-формата в двоичный формат:

Десятичное Шестнадцатиричное

4 х 1 = 4 4

3 х 10 = 30 1Е

2 х 100 = 200 С8

1 х 1000 = 1000 3Е8

Результат: 4 + 1Е + С8 + 3Е8 = 04D2 (двоичное)

13. Преобразование двоичного формата в ASCII-формат включает в себя процесс, обратный предыдущему. Вместо умножения используется деление двоичного числа на 10 (0АН), пока результат не будет меньше 10. Остатки, которые лежат в границах от 0 до 9, образуют число в ASCII-формате. В качестве примера рассмотрим преобразование 4D2H обратно в десятичный формат:

Частное Остаток

4D2 : A = 7B 4

7B : A = C 3

C : A = 1 2

Так как последнее частное 1 меньше, чем 0АН, то операция завершена. Остатки вместе с последним частным образуют результат в ASCII-формате, записываемый справа налево - 1234. Все остатки и последнее частное должны записываться в память с тройками, т.е. 31323334.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]