Ввод данных с клавиатуры и вывод данных на экран монитора осуществляется в коде ASCII. В коде ASCII каждый символ кодируется определенным шестнадцатеричным числом и имеет размерность 1 Байт. Например, для кодировки десятичной цифры, используются две шестнадцатеричные цифры: первая цифра 3 и вторая цифра, аналогичная десятичной.
23 = 3233Н = 0011 0010 0011 0011В (в ASCII коде)
В данном примере десятичное число 23 закодировано в ASCII коде, имеет размерность два байта, и представлено в шестнадцатеричном и двоичном форматах.
1234 = 31323334Н (в ASCII коде)
Четырехразрядное десятичное число будет представлено в ASCII коде числом размерностью 4 Байта.
Арифметические операции над числами в ASCII коде выполняются с помощью следующих ассемблерных команд:
1) AAA – коррекция для сложения ASCII-кода.
2) AAS – коррекция для вычитания ASCII-кода.
3) AAM – коррекция для умножения ASCII-кода.
4) AAD – коррекция для деления ASCII-кода.
Пример сложения чисел в ASCII-формате.
Рассмотрим операцию сложения десятичных чисел 8 + 4.
1. Преобразуем десятичные числа в ASCII-код:
8 = 38Н, 4 = 34Н
2. Выполним сложение ASCII-чисел:
38Н
34Н
6СН
3.Наращиваем полученный результат до размера 1 Байта:
6СН = 006СН
где 00Н – старшая часть Байта, 6СН – младшая часть Байта.
4. Команда ААА проверяет младшую цифру младшего байта, для нашего примера это цифра С, и проверяет флаг переноса в регистре флагов. Флаг переноса устанавливается в 1, если при сложении чисел произошла ситуация переноса.
В результате проверки может быть определено одно из следующих состояний:
1) Число находится в диапазоне 0 – 9Н, флаг переноса равен 0. В этом случае операция сложения ASCII-чисел считается законченной.
2) Либо число находится в диапазоне A – FH, либо флаг переноса равен1. В этом случае продолжается обработка кода, полученного при сложении ASCII-чисел.
В нашем примере анализируется цифра С, что соответствует второму состоянию. Поэтому преобразование кода продолжается.
3) Далее к младшей части Байта прибавляется 6, а к старшей части Байта прибавляется 1:
00Н
6СН
1Н
6Н
01Н
72Н
4) Далее левая цифра в младшем байте заменяется 0:
0172Н
0102Н
5) Далее к полученному числу прибавляется число 3030Н, чтобы каждая цифра Байта была тройкой по правилу ASCII-кода:
0102Н
3030Н
3132Н
Полученное шестнадцатеричное число 3132Н – это закодированное в ASCII-коде десятичное число 12.