ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 102

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Индивидуальное задание №2В заданиях для заданного варианта (табл. 2) требуется разработать структурную схему алгоритма программы. Ассемблировать вручную программу. И продемонстрировать ее работоспособность, выполнив ее на микроЭВМ. Дать описание всех команд своей программы.Коды команд размещать в памяти с адресами 5000h, а данные — с адресами 6000h.Табл 2 (вариант №6)

6

Умножение 16-битных сомножителей. Множитель в регистрах DE, множимое в регистрах ВС, произведение возвращается в регистрах DE–HL.




;










LXI

D,2222h

;В регистрах DE множитель




LXI

B,3333h

;В регистрах ВС множимое




CALL

MUL16

;Вызов подпрограммы




HLT




;Останов

MUL16:

MVI

A,l0h

;Образовать счетчик бит




LXI

H,0000h

;Инициировать регистры HL




PUSH

H

;и стек

LOOP:

XCHG




;Множитель в HL, младшая часть произведения в DE




DAD

H

;Сдвинуть множитель влево




XCHG




;Вернуть множитель и произведение




JNC

NOADD

;Бит множителя равен 0




DAD

В

;Прибавить множимое




JNC

NOADD

;Переноса не возникло




XTHL




;Старшая часть произведения в HL




INX

H

;Передать 1 в HL




XTHL




;Младшая часть произведения в HL

NOADD:

DCR

A

;Декремент счетчика бит




JNZ

MORE

;Продолжить умножение




POP

D

;Старшая часть произведения в DE




RET




;Возврат из подпрограммы

MORE:

DAD

H

;Сдвинуть младшую часть произведения




XTHL




;Старшая часть произведения в HL




PUSH

PSW

;Сохранить флаги в стеке




DAD

H

;Сдвинуть старшую часть произведения




POP

PSW

;Вернуть флаги




JNC

NOC

;1 в младшей части нет




INX

H

;Передать 1 из младшей части




NOC

XTHL

;Обменять части произведения




JMP

LOOP

;Повторять умножение

Текст программы;umn161.asm;Umnozhenie 16-bitny`kh somnozhitelei`. Mnozhitel` v registrakh DE, mnozhimoe v registrakh VS, ;proizvedenie vozvrashchaetsia v registrakh DE–HL. DEFSEG MAINSEG,CLASS=CODE,START=5000h SEG MAINSEG; stack MVI H, 0FFH MVI L, 0AAH SPHL; pervy`i` somnozhitel` LXI H,2222h XCHG;vtoroi` somnozhitel` LXI B,3333h ;V registrakh VS mnozhimoe; ozhidaemy`i` rezul`tat = 06D3 92C6h = 114528966 CALL MUL16 ;Vy`zov podprogrammy` HLT ;OstanovMUL16: MVI A,10h ;Obrazovat` schetchik bit LXI H,0000h ;Initciirovat` registry` HL PUSH H ;i stekLOOP: XCHG ;Mnozhitel` v HL, mladshaia chast` proizvedeniia v DE DAD H ;Sdvinut` mnozhitel` vlevo XCHG ;Vernut` mnozhitel` i proizvedenie JNC NOADD ;Bit mnozhitelia raven 0 DAD B ;Pribavit` mnozhimoe JNC NOADD ;Perenosa ne vozniclo XTHL ;Starshaia chast` proizvedeniia v HL INX H ;Peredat` 1 v HL XTHL ;Mladshaia chast` proizvedeniia v HLNOADD: DCR A ;Dekrement schetchika bit JNZ MORE ;Prodolzhit` umnozhenie POP D ;Starshaia chast` proizvedeniia v DE RET ;Vozvrat iz podprogrammy`MORE: DAD H ;Sdvinut` mladshuiu chast` proizvedeniia XTHL ;Starshaia chast` proizvedeniia v HL PUSH PSW ;Sokhranit` flagi v steke DAD H ;Sdvinut` starshuiu chast` proizvedeniia POP PSW ;Vernut` flagi JNC NOC ;1 v mladshei` chasti net INX H ;Peredat` 1 iz mladshei` chastiNOC: XTHL ;Obmeniat` chasti proizvedeniia JMP LOOP ;Povtoriat` umnozhenie ENDОписание алгоритма умножения:Программа использует алгоритм умножения столбиком.Умножение заменяется сдвигом (DAD H эквивалентно умножению на 2 или сдвигу влевона 1 разряд). Сдвиг и сложение производится 16 раз (счетчик на 16 находится в аккумуляторе и декрементируется на 1 за цикл). При достижении А=0 умножение заканчивается.Скриншот №1 Состояние в начале программыСкриншот №2 Состояние в конце программы. Как видно, в регистрахDE и HL находится правильное 4-х байтовое произведение = 06D3 92C6hВывод: программа работает правильно.Примечание: применен ассемблер и отладчик avsim85.exe (for DOS).