Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.205MDR = SP + MDR Такое ограничение существует, поскольку для операции сложения (в отличие от увеличения или уменьшения на 1) один из операндов должен быть значением регистра Н. Точно так же могло бы пригодиться, например, такое выражение: Н = Н - MDR Однако оно недопустимо, поскольку единственным возможным источником вычитаемого является регистр Н. В ассемблере не должно быть выражений, которые кажутся пригодными, но в действительности недопустимы. В нашей системе записи допускается использование нескольких операторов присваивания. Например, чтобы прибавить 1 к регистру SP и сохранить полученное значение в регистрах SP и MDR, нужно записать следующее: SP = MDR = SP + 1 Для обозначения процессов считывания из памяти и записи в память слов по 4 байта мы будем вставлять в микрокоманду операторы rd и wr. Для вызова байта через однобайтный порт используется оператор fetch. Операции присваивания и операции взаимодействия с памятью могут происходить в одном и том же цикле. То, что происходит в одном цикле, записывается в одну строку. Чтобы избежать путаницы, напомним еще раз, что Mic-1 может обращаться к памяти двумя способами. При чтении и записи 4-байтных слов данных используются регистры MAR и MDR. Эти процессы показываются в микрокомандах операторами rd и wr соответственно. При чтении однобайтных кодов операций из потока команд используются регистры PC и MBR. В микрокоманде это показывается оператором fetch. Оба типа операций взаимодействия с памятью могут происходить одновременно. Однако один и тот же регистр не может получать значение из памяти и тракта данных в одном и том же цикле. Рассмотрим фрагмент программы: MAR = SP; rd MDR = H В результате выполнения первой микрокоманды значение из памяти приписывается регистру MDR в конце второй микрокоманды. Однако вторая микрокоманда в то же самое время приписывает другое значение регистру MDR. Эти две операции присваивания конфликтуют, поскольку результаты не определены. Помните, что в каждой микрокоманде должен быть явно указан адрес следующей микрокоманды. Однако часто бывает так, что микрокоманда вызывается только одной микрокомандой, причем именно той, которая находится в предыдущей строке. Чтобы упростить работу программиста, микроассемблер обычно приписывает адрес каждой микрокоманде (порядок следования адресов может и не соответствовать последовательности микрокоманд в управляющей памяти) и заполняет поле NEXT_ADDRESS, так что последовательность выполнения микрокоманд соответствует очередности строк микропрограммы. Однако программисту иногда нужно совершать переход, условный или безусловный. Запись безусловных переходов проста: goto label Такая запись может включаться в любую микрокоманду. В ней явным образом указывается имя следующей микрокоманды. Например, очень часто после довательность микрокоманд заканчивается возвращением к первой команде основного цикла, поэтому последняя команда в каждой такой последовательности содержит запись goto Mai ni Отметим, что в тракте данных происходят обычные операции даже во время выполнения микрокоманд, которые содержат оператор goto. В любой микрокоманде есть поле NEXT_ADDRESS. Оператор goto сообщает ассемблеру, что в это поле вместо адреса микрокоманды, записанной в следующей строке, нужно поместить особое значение. В принципе, каждая строка должна содержать запись goto, но если нужный адрес — это адрес микрокоманды, записанной в следующей строке, goto для удобства можно опускать. |