ассемблер. Индивидуальное задание 2 (var 6). Индивидуальное задание 2
Скачать 97.88 Kb.
|
Индивидуальное задание №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 ;Ostanov MUL16: MVI A,10h ;Obrazovat` schetchik bit LXI H,0000h ;Initciirovat` registry` HL PUSH H ;i stek LOOP: 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 HL NOADD: 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` chasti NOC: 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). |