Ссылка , предоставленная @MichaelHaren, по-видимому, обеспечивает причину root . Точка с запятой (как указывали другие) наследуется от C. Но это не объясняет, почему C использовал ее в первую очередь. Обсуждение включает эту жемчужину примера:
struct fred { int x; long y; };
main()
{
return 0;
}
Старые версии C имели неявный int возвращаемый тип из функции, если не указано иначе. Если мы опустим ;
в конце определения структуры, мы не только определяем новый тип fred
, но также объявляем, что main()
вернет экземпляр fred
. То есть код будет анализироваться следующим образом:
struct fred { int x; long y; } main()
{
return 0; /* invalid return type, expected fred type */
}
MAR является деталью реализации. Конвейерный ЦП может не иметь MAR сам по себе или не иметь единственного MAR, особенно если он имеет многопортовый кеш, который может читать + записывать в одном цикле.
В архитектурах с регистром с именем X
, X
является архитектурным регистром , который хранит свое значение независимо от того, что еще обращается к памяти.
например. абсолютная неиндексированная нагрузка использовала бы MAR для управления адресной шиной, но ЦП все равно должен был бы сохранить то же значение для X
. Кроме того, MAR должен быть таким же широким, как физические адреса в машине, но X
является только 8-битным регистром в 6502. (Таким образом, вы можете индексировать только 256 байтов из данной базы).
Программный счетчик обычно не доступен напрямую, за исключением режимов адресации, относящихся к ПК, или инструкции вызова хранят где-нибудь адрес возврата. И прыгает, пишет ПК. Но в некоторых отношениях это также деталь реализации; конвейерный процессор не обязательно будет иметь один регистр ПК. Но скалярный конвейер порядка будет эффективно иметь ПК в стадии извлечения. (Или нетранслируемый ЦП, разумеется, будет иметь один ПК.)
Предположительно, выборка кода копирует ПК в MAR как часть загрузки машинного кода для следующей инструкции. [1121 ]
Архитектуры с регистром X
включают в себя
IX
регистр (индекс X), состоящий из 2 8-битных половинок. См. https://retrocomputing.stackexchange.com/questions/6095/why-do-c-to-z80-compilers-produce-poor-code/ для некоторых интересных подробностей о том, как регистры и режимы адресации в 6502 и Z80 не отображаются на модель C указателей, которые можно индексировать целым числом. И нелегко поддерживать режимы адресации относительно стека, затрудняющие рекурсию. r27:r26
): Регистры AVR XYZ . Это не ограничено тем, чтобы быть индексом. 8080 имеет HL, а не X.