Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Форматы команд MMIXСтруктура команд процессора для выполнения различных операций может несколько отличаться: например заранее ясно, что инструкции сложения и условного перехода функционально не похожи настолько сильно, что вполне могут по-разному хранить внутри себя необходимую информацию. Распределение битов команды между отдельными ее частями часто называют форматом команды. MMIX использует 5 форматов операций. Опишем их, сохраняя введенную Д.Кнутом нумерацию. Напомним читателю, что каждая команда занимает 32 бита, т.е. 4 байта. Формат 0Используется довольно редко, только для немногочисленных системных инструкций (я насчитал всего три, и все достаточно экзотические). Существенным является только код операции, остальная часть команды произвольна.
При первом знакомстве этот формат смело можно пропустить, поэтому никаких примеров и дополнительных сведений здесь не приводится. Формат 1Данный формат в MMIX является основным. Помимо кода операции, задаются адреса трех регистров: в первый из них ($X) заносится результат выполнения операции, а второй и третий ($Y и $Z) позволяют сослаться на исходные данные (операнды).
В наиболее общем виде рассматриваемый тип операций можно сформулировать в виде “установить регистр $X в соответствии с результатом операции над регистрами $Y и $Z”. Операция может быть любой: арифметической, логической или даже записью или чтением из ячейки памяти. Вот несколько примеров:
Формат 2Фактически является разновидностью предыдущего формата. Единственное отличие состоит в том, что вместо последнего регистра указывается константа – беззнаковое целое значение от 0 до 255.
Например: 21 03 01 02 – к содержимому регистра $1 прибавить 2, результат поместить в $3 (сравните с первым примером из предыдущего пункта). Обратите внимание на то обстоятельство, что большинство инструкций MMIX допускает оба формата, причем коды одноименных операций форматов 1 и 2 всегда отличаются на единицу. Формат 3Кроме кода операции задается единственный регистр $X и двухбайтовая константа от 0 до 655353, обозначенная на рисунке YZ.
Формат используется в двух различных случаях: В первом случае непосредственно заданная в команде константа YZ указанным в коде операции способом воздействует на содержимое регистра $X. Например, команда с кодом E1 03 FFFF устанавливает значение регистра $3 равным 0000 FFFF 0000 0000, т.е. в определенную пару байт заносится указанная константа FFFF, а остальные байты обнуляются. Во втором случае анализируется содержимое регистра $X и в случае выполнения условия, определяемого кодом операции, к адресу текущей команды добавляется 4*YZ байт, т.е. осуществляется условный переход через заданное число инструкций. Так инструкция с кодом 42 05 0004 в случае нулевого содержимого регистра $5 пропустит 4 следующих после нее команды программы. Подчеркнем, что значение смещения YZ в командах перехода MMIX может быть как положительным, так и отрицательным, а коды инструкций "вперед по программе" или "назад" отличаются на единицу. Формат 4Объединяет 3 последних байта в одну большую беззнаковую константу.
Используется довольно редко: для реализации "длинных" безусловных переходов и в двух достаточно сложных системных командах. Примеры рассматривать не будем. P.S. Форматы команд здесь описаны по данным Д.Кнута. Но, честно говоря, есть еще несколько специфических форматов для 1-2 операций каждый, не отраженных на данной страничке. © Е.А.Еремин, 2002 Статья: Еремин Е.А. MMIX – учебный RISC-процессор нового тысячелетия от Дональда Кнута. - Газета "Информатика", 2002, N 40, с.18-27 |