Консультация № 187437
04.06.2013, 21:29
129.59 руб.
0 5 1
Здравствуйте! Прошу помощи в следующем вопросе:
Извините если не туда написал, более подходящее не чего не нашёл. Преподователь задал курсовую "Разработать структуру ПРОЦЕССОРА с одномагистральным АЛУ" и нужно сделать структурную схему процессора работы программы умножение.
Пример:
Эта схема двух магистральная и для выполнения команды «Пересылка строк».


Вот этой вариант, его заброковали. Сказала, что нужно что - то изменить в РОН, а так же в регистре команд. Ещё нужно по этой схеме рассказать как происходит умножение. В приложение скинул микропрограмму и блок схему


Всем большое спасибо. И извините если не туда написал.
https://rfpro.ru/upload/9399

Приложение:
https://rfpro.ru/upload/9399

Обсуждение

Неизвестный
04.06.2013, 21:31
общий
Блок схема и микропрограмма
давно
Посетитель
7438
7205
05.06.2013, 10:15
общий
05.06.2013, 10:16
Мда, явно вопрос не по ассемблеру...
Я Вам могу рассказать, как работает программа для 80-го процессора... Могу новую написать, любую...
А вот эти Ваши схемы... Никогда их не использовал и не понимал, для чего они нужны...
Дайте хоть какое-то описание, теорию по этому вопросу... Чтобы понять, как эти схемы должны строиться...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
05.06.2013, 10:50
общий
05.06.2013, 10:56
Первое и самое очевидное:
РОН - должен замыкатся на шину двунаправленной связью. Сейчас получается, что в РОН можно только записывать и считывать в адресный регистр, т.е. команды сложения, вычитания и логика игнорируются.

С регистром команд - вроде всё нормально, с ШД КОП команды попадает в регистр, декодируется и передается на УУ.

Код:
;bc=b*c
mul: push h ;сохранить регистры
push d
XRA A ;Обнулить аккумулятор
MOV H,A ;H=0
MOV L,A ;L=0(HL=0)
MOV E,B ;E=B
MOV D,A ;D=0(DE=множимому)
MVI B,08 ;Количество сдвигов множителя
M1: MOV A,C ;Заносим множитель в аккумулятор
RRC ;Сдвигаем вправо
MOV C,A ;Возвращаем множитель
JNC M2 ;Если младший бит множителя=0, то пропускаем сложения результата со множителем
DAD D ;сложения результата со множителем (HL=HL+DE)
M2: MOV A,E ;Заносим младшую часть множимого в аккумулятор
ORA A ;Сбрасываем флаг С
RAL ;Сдвигаем младшую часть множимого влево
MOV E,A ;Возвращаем ее на место
MOV A,D ;Заносим старшую часть множимого в аккумулятор
RAL ;Сдвигаем старшую часть множимого влево
MOV D,A ;Возвращаем ее на место
DCR B ;Уменьшаем количество оставшихся сдвигов
JNZ M1 ;Продолжаем пока оно не 0
mov b,h ;b=h
mov c,l ;c=l
pop d ;Восстановить регистры
pop h
RET ;Выход из подпрограммы.


Это код под Z80(KP580, i8080)?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
05.06.2013, 11:48
общий
05.06.2013, 12:07
Код:
;bc=b*c
mul: push h ;1
push d ;1
XRA A ;1
MOV H,A ;1
MOV L,A ;1=5
MOV E,B ;1
MOV D,A ;1
MVI B,08 ;2
M1: MOV A,C ;1=10
RRC ;1
MOV C,A ;1
JNC M2 ;2
DAD D ;1=15
M2: MOV A,E ;1
ORA A ;1
RAL ;1
MOV E,A ;1
MOV A,D ;1=20
RAL ;1
MOV D,A ;1
DCR B ;1
JNZ M1 ;2=25
mov b,h ;1
mov c,l ;1
pop d ;1
pop h ;1
RET ;1=30

Убрал всё лишнее:
Код:
mul:
PUSH h ;1
PUSH d ;1
;
XRA a ;1
MOV h,a ;1
MOV l,a ;1=5
MOV e,b ;1
MOV d,a ;1
MOV a,c ;1
;
M1:
RRC ;1
JNC M2 ;2=11
DAD d ;1
M2:
XCHG ;1
DAD h ;1
XCHG ;1=15
;
ORA A ;1
JNZ M1 ;2
;
PUSH h ;1
POP b ;1=20
POP d ;1
POP h ;1
RET ;1=23

и байты, и итерации.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
07.06.2013, 17:36
общий
это ответ
Здравствуйте, Илья!

Представленная Вами схема процессора с одномагистральным АЛУ практически ничем не отличается от полной схемы процессора.

Если сравнивать обе схемы, то видно, что Регистры общего назначения(РОН) замыкается на магистраль двунаправленной связью, а также между Регистром Команд(РК) и Устройством Управления(УУ) есть ещё и Дешифратор Команды(ДК). Отсутствие ДК ошибкой считать нельзя, т.к. он является составной частью УУ, но есть и такие, кто чтитает его отдельным блоком. Регистр Флагов назван Регистром Признаков.


Код подрограммы:
Код:
mul:	push h	;сохранить используемые регистры
push d
XRA A ;Обнулить аккумулятор
MOV H,A ;H=0
MOV L,A ;L=0(HL=0)
MOV E,B ;E=B
MOV D,A ;D=0(DE=множимому)
MOV A,C ;Заносим множитель в аккумулятор
M1: RRC ;Сдвигаем вправо
JNC M2;Если младший бит множителя=0, то пропускаем
DAD D ;сложения результата со множителем (HL=HL+DE)
M2: XCHG ;обмениваем пары регистров DE и HL
DAD H ;умножаем на 2, сдвигаем влево и т.п.
XCHG ;обмениваем пары регистров DE и HL
ORA A ;проверяем ноль, т.е. устанавливаем флаги
JNZ M1 ;Продолжаем пока аккумулятор не 0
PUSH H ;запоминаем результат
POP B
pop d ;Восстановить регистры
pop h
RET ;Выход из подпрограммы.

После дешифрации команды УУ начинает последовательно выполнять определенные микропрограммы.
Каждая микропрограмма выполняется приблизительно за 4-6 тактов процессора без учета тактов ожидания и её можно представить ввиде временных диаграмм.

Названия соответсвуют сигналам процессора при обращении к внешними устройствами. УУ генерирует сигнал [i]М1[/i](чтение Кода Операции - КОП) и заставляет Регистр Адреса(РА) вывести текущий адрес в шину. С помощью сигналов [i]MREQ[/i](запрос памяти) и [i]RD[/i](чтение) внешним устройствам сообщается, что процессор собирается читать КОП. Проверяется сигнал [i]WAIT[/i](Ожидание), если он есть, то генерируется такт ожидания, если нет- чтение КОП в Буфер Данных(БД), только потом полученное значение копируют в РК, запускается ДК и выполняется полученная команда(считываются операнды и т.д.), дальше - УУ генерирует сигнал [i]М1[/i].

Каждый раз, дешифровав команду, назначается источник информации и её приемник(приемники), остальные устройства заблокированы или занимаются своей ранее назначеной задачей, но они не обращаются к шине данных, пока она не освободится. Когда информация будет скопирована, шина данных освобождается.

Подробно остановимся на использованых в подпрограмме командах.
[table]
[row][col]PUSH[/col][col]OCR[/col][col]SPD[/col][col]SWH[/col][col]SPD[/col][col]SWL[/col][/row]
[row][col]XRA[/col][col]OCR[/col][col]-[/col][col]-[/col][col]-[/col][col]-[/col][/row]
[row][col]MOV[/col][col]OCR[/col][col]-[/col][col]-[/col][col]-[/col][col]-[/col][/row]
[row][col]RRC[/col][col]OCR[/col][col]-[/col][col]-[/col][col]-[/col][col]-[/col][/row]
[row][col]J?[/col] [col]OCR[/col][col]ORD[/col][col]IOP[/col][col]-[/col][col]-[/col][/row]
[row][col]DAD[/col][col]OCR[/col][col]IOP[/col][col]IOP[/col][col]-[/col][col]-[/col][/row]
[row][col]XCHG[/col][col]OCR[/col][col]-[/col][col]-[/col][col]-[/col][col]-[/col][/row]
[row][col]POP[/col][col]OCR[/col][col]SRL[/col][col]SPI[/col][col]SRH[/col][col]SPI[/col][/row]
[row][col]RET[/col][col]OCR[/col][col]SRL[/col][col]SPI[/col][col]SRH[/col][col]SPI[/col][/row]
[/table]
OCR - operation code read - чтение кода операции;
ORD - operand read - чтение операнда;
IOP - internal CPU-operation - внутренняя операция процессора;
SPD - stack pointer decrement - уменьшение указателя стека;
SPI - stack pointer increment - увеличение указателя стека;
SWH - stack write high byte - запись в стек старшего байта;
SWL - stack write low byte - запись в стек младшего байта;
SRH - stack read high byte - чтение со стека старшего байта;
SRL - stack read low byte - чтение со стека младшего байта;
J? - условный переход.
Расмотрим, что происходит в самом процессоре:
OCR - Значение счетчика команд попадает в буфер адреса, по указаному адресу считывается значение в буфер данных, счетчик команд инкрементируется, а прочитаное значение из буфера, попадает в регистр команд и дешифруется.
ORD пракически ничем не отличается от OCR, кроме того, что прочитаное значение попадает во временный регистр данных, на второй вход АЛУ подается уже увеличеное значение счетчика команд и суммируется, т.е. выполняется внутренняя команда процессора IOP.
SPD/SPI указатель стека уменьшается/увеличивается на 1 и полученое значение отправляется в регистр адреса.
SWH/SWL старший/младший байт регистровой пары отправляется в буфер данных и потом записывается по адресу, который находится в регистре адреса.
SRH/SRL по адресу из регистра адреса считывается значение и помещается в буфер данных, потом его отправляют в РОН в соответсвующий регистр.

В прикрепленном файле блок-схема и код подпрограммы.

Удачи!

ps:вопросы задавайте в мини-форум.
Прикрепленные файлы:
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа