Материалы сайта
Это интересно
Вычислительная техника
III часть : Разработка фрагмента программы МПУ . Составить фрагмент программы МПУ в виде подпрограммы ( или в виде программы обслуживания прерывания ПОП ) , что есть в варианте . Начальный адрес для подпрограммы : [ P ] = 63 + n10 Требуется : - на языке Ассемблера с соблюдением требований формата бланка ; - комментарий должен давать полное описание действий конкретной задачи , а не описание данной команды ; - в конце любого комментария должна быть дана продолжительность операции – требуемое число тактов синхронизации. Решение поставленной задачи : ; Подпрограмма на языке Ассемблер : | | |ORG |00D4H |;Подпрограмма начинается с | | | | | | | | | | | | | |;адреса 00D416 | | | | |LXI |D,0200H |;бл.1Загрузка адреса | | | | | | |младшего | | | | | | |;байта числа Х1 в пару | | | | | | |;регистров DE | | | | | | |(т.10) | | | | |MVI |B,0002H |;бл.2 Подготовка счётчика | | | | | | |;сложений, | | | | | | |т.е.непосредствен-;ное | | | | | | |присвоение регистру В | | | | | | |;значения 2 | | | | | | |(т.7) | | | | |XRA |A |;бл.3 Обнуление | | | | | | |аккумулятора , | | | | | | |;а также установка в ноль | | | | | | |тр- | | | | | | |;ров переноса Tc и Tv | | | | | | |(т.4) | | | |LOOP2: |LXI |H,0300H |;бл.4 Загрузка адреса | | | | | | |младшего | | | | | | |;байта числа Х2 или (Х1+Х2)| | | | | | |в | | | | | | |;пару регистров HL | | | | | | |(т.10) | | | | |MVI |C,0006H |;бл.5 Подготовка счётчика | | | | | | |;байтов , т.е. | | | | | | |непосредственное | | | | | | |;присвоение счётчику байтов| | | | | | |С | | | | | | |;значения 6 , т.к. после | | | | | | |;сложения Х1 и Х2 может | | | | | | |;возникнуть перенос и число| | | | | | | | | | | | | |;окажется уже в 6 байтах, а| | | | | | |не в 5 (т.7) | | | |LOOP1: |LDAX |D |;бл.6 Загрузка в | | | | | | |аккумулятор | | | | | | |;следующего байта числа Х1 | | | | | | | | | | | | | |;или Х3, хранящегося по | | | | | | |адресу | | | | | | |;в паре DE | | | | | | |(т.7) | | | | |ADC |M |;бл.7 Суммирование байтов | | | | | | |;чисел Х1 или Х3 и Х2 или | | | | | | |;(Х1+Х2) , а также | | | | | | |переноса, | | | | | | |;если такой был | | | | | | |(т.4) | | | | |DAA | |;бл.8 Десятичная коррекция | | | | | | |;аккумулятора(т.к. у меня | | | | | | |коды | | | | | | |;BCD и максимальное число | | | | | | |;здесь 9, а не 16 ) | | | | | | |(т.4) | | | | |MOV |M,A |;бл.9 Пересылка очередного | | | | | | |;байта частичной суммы | | | | | | |;(Х1+Х2) на место Х2 | | | | | | |(т.7) | | | | |DCR |C |;бл.10 Уменьшение на 1 | | | | | | |;счётчика байтов | | | | | | |(т.5) | | | | |JZ |NB |;бл.11 УП: если содержимое | | | | | | |сч. | | | | | | |;байтов равно 0 ( С = 0 ), | | | | | | |то | | | | | | |;переход к бл. 15 , если же| | | | | | |С =0, | | | | | | |;т.е. ещё не все байты | | | | | | |чисел | | | | | | |;сложены, то переход к | | | | | | |;суммированию след. байтов,| | | | | | | | | | | | | |;т.е. к блоку 12 | | | | | | |(т.10) | | | | |INХ |D |;бл.12 Переход к адресу | | | | | | |;следующего байту числа Х1 | | | | | | | | | | | | | |;или Х3 путём | | | | | | |положительного | | | | | | |;инкремента пары регистров | | | | | | |DE (т.5) | | | | |INХ |H |;бл.13 Переход к адресу | | | | | | |;следующего байта числа Х2 | | | | | | | | | | | | | |;или (Х1+Х2) путём | | | | | | |;положительного инкремента | | | | | | |;пары регистров HL | | | | | | |(т.5) | | | | |JMP |LOOP1 |;бл.14 БП к блоку 6 для | | | | | | |;суммирования след. байтов| | | | | | | | | | | | | |;чисел Х1 и Х2 либо Х3 и | | | | | | |;(Х1+Х2)(к началу внешнего | | | | | | |цикла) (т.10) | | | |NB : |DCR |B |; бл.15 Переход к | | | | | | |суммированию суммы ;Х1+Х2 с| | | | | | |числом Х3, т.е. уменьшение | | | | | | |;счётчика сложений на 1 | | | | | | |(т.5) | | | | |RZ |EN |;бл.16 УП : если В=0 , т.е.| | | | | | |все три числа ;сложены , то| | | | | | |возврат в основную | | | | | | |;программу , ежели В = 0 , | | | | | | |т.е. не все числа ;сложены | | | | | | |, то переход к след. блоку | | | | | | |17 (т.10) | | | | |LXI |D,0400H |;бл.17 Загрузка адреса | | | | | | |младшего байта числа ;Х3 в| | | | | | |пару регистров DE | | | | | | |(т.10) | | | | |JMP |LOOP2 |; бл.18 БП к блоку 4 для | | | | | | |суммирования числа ;Х3 с | | | | | | |суммой ( Х1+Х2) (к началу | | | | | | |внешнего ;цикла ) | | | | | | |т.10) | | | |EN : |END | |; конец подпрограммы | | III часть : Подпрограмма . Сложить три положительных 10 – значных десятичных числа Х1, Х2, Х3 , представленные в коде BCD и хранящиеся в секторах ОЗУ с адресами младших байтов соот. 20016; 30016; 40016 . Поместить полученную сумму (также в коде BCD) с учётом старшего (шестого) байта на случай переполнения в секторе ОЗУ на место Х2, т.е. по адресу 30016 . Предполагается, что шестые байты в указанных секторах первоначально пусты. Это – задача с двойным (вложенным) циклом. Блок – схема алгоритма : ----------------------- EN 6 7 8 9 10 11 12 13 14 15 16 17 18 4 5 1 2 3 ДА ДА NB PC [Addr] DE 40016 LOOP2 (Tz)=1 B (B) -1 (Tz)=1 HL (HL) + 1 PC [ Addr ] DE (DE) + 1 LOOP1 C ( C ) -1 M (A) B 2 10 - КОРР A (A)+[(M)]+(Tc) A [(DE)] C 6 HL 30016 A (A)V(A) DE 20016