Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Xlat (см. Гл.14).

Тщательно проверяйте программы для любых возможных состояний: нулевое

значение, максимально большие и малые значения, отрицательные значения.

Отрицательные величины

------------------------

Некоторые применения программ допускают наличие отрицательных

величин. Знак минус может устанавливаться после числа, например, 12,34-,

или перед числом -12,34. Программа может проверять наличие минуса при

преобразовании в двоичный формат. Можно оставить двоичное число

положительным, но установить соответствующий индикатор исходной

отрицательной величины. После завершения арифметических операций знак

минус при необходимости может быть вставлен в ASCII поле.

Если необходимо, чтобы двоичное число было также отрицательным, то

можно преобразовать, как обычно, ASCII-формат в двоичный, а для изменения

знака двоичного числа воспользоваться командами, описанными в гл.12

"Преобразование знака". Будьте внимательны при использовании команд IMUL и

Idiv для обработки знаковых данных. Для округления отрицательных чисел

следует не прибавлять, а вычитать фактор 5.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- ASCII-формат требует один байт на каждый символ. Если поле содержит

только цифры от 0 до 9, то замена старших троек в каждом байте на нули

создает распакованный десятичный формат. Сжатие числа до двух цифр в байте

создает упакованный десятичный формат.

- После ASCII-сложения необходимо выполнить коррекцию с помощью

команды AAA; после ASCII-вычитания - коррекция с помощью команды AAS.

- Прежде чем выполнить ASCII-умножение, необходимо преобразовать

множимое и множитель в "распакованный десятичный" формат, обнулив в каждом

байте левые тройки. После умножения необходимо выполнить коррекцию

результата с помощью команды AAM.

- Прежде чем выполнить ASCII-деление, необходимо: 1) преобразовать

делимое и делитель в "распакованный десятичный" формат, обнулив в каждом

байте левые тройки и 2) выполнить коррекцию делимого с помощью команды

AAD.

- Для большинства арифметических операций используйте преобразование

чисел из ASCII-формата в двоичной формат. В процессе такого преобразования

проверяйте на корректность ASCII-символы: они должны быть от шест.30 до

шест.39, могут содержать десятичную запятую (точку) и, возможно, знак

минус.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

13.1. Предположим, что регистр AX содержит 9 в ASCII коде, а регистр

BX -7 также в ASCII коде. Объясните и дайте точный результат для следующих

несвязанных операций:

а) ADD AX,33H б) ADD AX,BX

AAA AAA

в) SUB AX,BX г) SUB AX,0DH

AAS AAS

13.2. Поле UNPAK содержит шест. 01040705 в распаковочном десятичном

формате. Напишите цикл, который преобразует это содержимое в ASCII-формат,

т.е. 31343735.

13.3. Поле ASCA содержит значение 313733 в ASCII-формате, а другое

поле ASCB содержит 35. Напишите команды для умножения этих чисел в

ASCII-формате и записи произведения в поле ASCPRO.

13.4. Используя данные из вопроса 13.3, разделите ASCA на ASCB и

запишите частное в поле ASCQUO.

13.5. Выполните следующие вычисления вручную: а) преобразовать ASCII

46328 в двоичный формат и показать результат в шест.виде; б) преобразовать

полученное шест. значение обратно в ASCII-формат.

13.6. Напишите и выполните программу, которая определяет размер

памяти компьютера (INT 12H - см. гл.2), преобразует полученное значение в

ASCII-формат и выводит результат на экран в следующем виде:

Размер памяти nnn байтов.