68 тысяч адресов регистров

#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. Спасибо. В то время я писал эмулятор, поэтому полагаться на ассемблер было невозможно.