ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 102
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Индивидуальное задание №2В заданиях для заданного варианта (табл. 2) требуется разработать структурную схему алгоритма программы. Ассемблировать вручную программу. И продемонстрировать ее работоспособность, выполнив ее на микроЭВМ. Дать описание всех команд своей программы.Коды команд размещать в памяти с адресами 5000h, а данные — с адресами 6000h.Табл 2 (вариант №6)
Текст программы;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).
| 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).