#assembly #machine-code #instruction-set #68000
#сборка #машинный код #набор инструкций #68000
Вопрос:
Этот вопрос требует множества ответов типа «зачем вы это делаете?».
Я не смог найти эту информацию в Справочном руководстве программиста 68k, но это может быть потому, что я не уверен, какую формулировку искать.
Вот формат инструкции для ADD
кода операции 68k.
Биты 0-2 и 9-11 обозначают регистры. Каковы двоичные представления регистров 68k? Являются ли они «адресами»?
Да, я знаю, что могу написать программу сборки 68k и отладить ее, чтобы найти эту информацию. Я ищу ссылку. Спасибо!
Комментарии:
1. У регистров нет адресов. Если вы этого не понимаете, вы не разбираетесь в архитектуре машины. Биты просто указывают, какой регистр в процессоре следует использовать. Они декодируются моим движком микрокода.
2. Я знаю, что это не адреса памяти. Это очевидно. Они все еще могли быть / называться / адресами. Кроме того, я не утверждал, что разбираюсь в архитектуре машин. Я пытаюсь учиться; простите, что задаю вопрос.
3. @mwcz мы могли бы назвать их «zoinks», но это не делает их zoinks. Терминология важна, и в случае написания и понимания программ с машинным кодом, очень важна.
4. Именно поэтому я задал вопрос «Являются ли они «адресами»?» Насколько я знаю, у них могут быть «адреса регистров». Не ругайте кого-либо за то, что он просит разъяснений по терминологии, а затем скажите им, что знание терминологии важно.
5. Просто чтобы занять промежуточное положение между вами двумя: в архитектурах RISC (предшественником которых можно считать 68000) существует концепция «регистровых файлов», и в этом отношении три регистрационных бита могут рассматриваться как индекс в регистровом файле. Однако «файл» находится внутри самого процессора, поэтому, на мой взгляд, это только усложняет значение слова «файл», делая терминологию программирования на ассемблере излишне двусмысленной.
Ответ №1:
Смотрите раздел 2.1, «Формат инструкции»:
Инструкция определяет функцию, которая должна выполняться с кодом операции, и определяет местоположение каждого операнда. Инструкции определяют местоположение операнда с помощью спецификации регистра, поле register команды содержит номер регистра; с помощью effective address поле effective address команды содержит информацию о режиме адресации; или с помощью неявной ссылки, определение команды подразумевает использование определенных регистров. (выделено мной)
Комментарии:
1. Спасибо, это помогает. Я только что понял это, и это было настолько очевидно, что неудивительно, что это не было указано в документах. 🙂
2. @mwcz для нас, простых смертных, после этого вопроса является ли номер регистра трехзначным двоичным представлением восьми регистров D0-D7 или A0-D7?
3. @Caltor Да, это так. Когда я опубликовал этот вопрос, я был озадачен тем, как на все шестнадцать регистров (регистры A и D) может ссылаться 3-разрядное поле. Сейчас это кажется глупым вопросом, поскольку (в ретроспективе) довольно очевидно, что число (0-7) содержится в поле register, и режим адресации определяет, относится ли это число к регистру A или D.
4. @mwcz Ah режим адресации определяет, является ли это регистром A или D; я пропустил эту часть. Я не думаю, что существует такая вещь, как глупый вопрос. В любом случае, я нашел это полезным в моем понимании 68k. Спасибо
Ответ №2:
Вероятно, они относятся к регистрам An и Dn, перечисленным на рис. 1-1, стр. 1-2 руководства, на которое вы ссылаетесь.
Ответ №3:
3 бита определяют номер регистра адресов, от 0 (биты: 0-0-0) до 7 (биты: 1-1-1). Но, как правило, вы можете позволить ассемблеру беспокоиться об этом. Я надеюсь, что это поможет, Дэйв
Комментарии:
1. Спасибо. В то время я писал эмулятор, поэтому полагаться на ассемблер было невозможно.