Архитектура компьютера
Введение Теоретическая часть 1 Архитектура компьютера Лабораторный практикум 1 Создание программы на языке ассемблера 2 Применение функций DOS и BIOS 3 Линейные алгоритмы 4 Десятичная арифметика 5 Команды передачи управления 6 Циклы с условием 7 Циклы со счетчиком 8 Работа с массивами 9 Цепочечные команды Приложения 1 Таблица кодов символов ASCII 2 Функции DOS и BIOS Гостевая книга Лабораторная работа №4
Десятичная арифметика
Вопросы для повторения:
- Что такое позиционные системы счисления?
- Что называется двоичной (десятичной) арифметикой?
- Каково назначение BCD-кода?
- Какие команды работают с BCD-числами?
- Как работают команды daa и das?
Команды десятичной арифметики
Рассматриваемые ниже команды предназначены для работы с неупакованными BCD-числами. Изучите их работу по приведенным в таблице примерам.
Назначение Алгоритм работы Пример aaa коррекция результата сложения двух одноразрядных неупакованных BCD-чисел
- проанализировать значение младшего полубайта регистра al и значение флага af;
- если (значение младшего полубайта регистра al >9) или (AF=1), то выполнить следующие действия:
иначе сбросить флаги af = 0 и cf = 0.
- увеличить значение al на 6;
- очистить старший полубайт регистра al;
- увеличить значение ah на 1;
- установить флаги: af = 1, cf = 1,
mov al, 7
mov ch, 6
add al, ch
aaa
; ah=1
; al=3
aas коррекция результата вычитания двух неупакованных одноразрядных BCD-чисел если (младший полубайт регистра al меньше 9) или (флаг af=1), то выполнить следующие действия:
иначе установить флаги af и cf в 1
- уменьшить значение младшего полубайта регистра al на 6;
- обнулить значение старшего полубайта регистра al;
- установить флаги af и cf в 1;
mov al, 5
mov ch, 6
sub al, ch
aas
; al=9aam
- коррекция результата умножения двух неупакованных BCD-чисел;
- преобразование двузначного числа (<= 9910) из двоичного вида в его неупакованный BCD-эквивалент
- разделить значение регистра al на 10;
- записать частное в регистр ah, остаток — в регистр al.
mov al, 7
mov ch, 6
mul ch
aam
; ah=4
; al=2aad
- подготовка двух неупакованных BCD-чисел для операции деления;
- преобразование двузначного неупакованного ВCD-числа в двоичное представление
- умножить значение регистра ah на 10 и сложить полученное значение с содержимым регистра al: (ah*10)+al;
- присвоить регистру al значение (ah*10)+al;
- обнулить регистр ah
mov ah, 4
mov al, 2
aad
; al=42
mov cl, 6
div cl
; al=7
Задание:
Вывести на экран сумму двух введенных с клавиатуры двузначных чисел (Вводить посимвольно функцией 01 прерывания 21h, значение вводить так, чтобы сумма была меньше 100). Для решения задачи применить команды десятичной арифметики. Проследить за выполнением операций с использованием отладчика. (10 баллов)
Задания для самостоятельного выполнения
- Вывести на экран байт в десятичном виде (10 баллов);
© Истомин А.С. ЗабГГПУХостинг от uCoz