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

3. Программа вычитает строку, указанную регистром r1, из строки, указанной регистром r0, с точностью, указанной регистром r2. После выполнения операции проверяется переполнение результата.

SUB: CLR C ; 3аем=0

BEG: MOV A,@R0 ; Загрузка байта уменьшаемого

SUBB A,@R1 ; Вычитание байта

MOV @R0,A ; Запоминание байта разности

INC R0 ; Установка указателей на следующее

INC R1 ; поле

DJNZ R2,BEG ; Выполнение цикла до завершения операции

; После завершения цикла проверяется ситуация переполнения в последней итерации.

JNB OV,OK

; .............

; Программа восстановления старших разрядов

OK: RET

III. Умножение и деление.

Команда MUL вычисляет произведение двух целых беззнаковых чисел, хранящихся в регистрах А и В. Младшая часть произведения размещается в А, а старшая – в регистре-расширителе В. Если содержимое В оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса всегда сбрасывается.

Например, если аккумулятор содержал число 200 (0C8H), а расширитель 160 (0A0H), то в результате выполнения команды MUL АВ получится произведение 32000 (7D00H). Аккумулятор будет содержать нуль, а расширитель - 7DH, флаг OV будет установлен, а флаг С – сброшен.

1. Пусть требуется умножить целое двоичное число на константу. Исходное число размещается в резидентной памяти данных (РПД), адрес младшего байта находится в регистре R0. Формат числа в байтах хранится в R0:

CONST EQU 123

MOV A,#0 ; Сброс аккумулятора

L: ADD A,@R0 ; Загрузка множимого

11

MOV B,#CONST ; Загрузка множителя

MUL AB ; Умножение

MOV @R0,A ; Запись младшего байта частичного произведения

INC R0 ; Приращение адреса

MOV A,B ; Пересылка старшего байта частичного произведения в аккумулятор

XCH A,@R0 ; Предварительное формирование очередного байта произведения

DJNZ R1,L ; Цикл, если не все байты исходного числа умножены на константу

Полученное произведение размещается на месте исходного числа и занимает в РПД на один байт больше.

2. Команда DIV производит деление содержимого аккумулятора на содержимое регистра-расширителя. После деления аккумулятор содержит целую часть частного, а расширитель – остаток. Флаги C и OV сбрасываются. При делении на нуль устанавливается флаг переполнения, а частное остается неопределенным.

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

Программа BINBCD выполняет преобразование целого двоичного 8-разрядного числа без знака, содержащегося в регистре А (значение в интервале 0-255), в трехзначное число двоично-кодированного формата BCD (два байта). Число сотен возвращается в поле переменной HUND, а числа десятков и единиц возвращаются в двоично-десятичном упакованном коде в поле другой переменной TENONE.

; BINBCD Выполняет преобразование 8-разрядного двоичного

; числа, хранящегося в регистре, в трехзначное число в

; двоично-десятичном упакованном формате.

; Число сотен размещено слева в поле переменной HUND,

; а числа десятков и единиц размещены в переменной TENONE.

ORG 21H

HUND DS 1

TENONE DS 1

BEG: MOV В,#100 ; Разделить на 100 для определения числа сотен

DIV АВ ; Разделить остаток на 10

MOV HUND ; для определения числа

MOV А,#10 ; сотен слева

ХСН А,В ; Цифра десятков в А

DIV АВ ; Остаток - цифра единиц

SWAP A ; В А цифры в двоично-десятичном упакованном формате

ADD А,В

MOV TENONE,A

RET

12

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