Как бы я go об имитации этапа выборки процессора? - PullRequest
0 голосов
/ 16 апреля 2020

Итак, я пытаюсь создать программу, которая имитирует 8-битный процессор на C ++, и я специально нахожу препятствие на той части, где процессор выбирает следующую инструкцию из памяти. (не настоящий процессор, хотя набор инструкций основан на 6502). Этот проект является чисто компьютерным упражнением, с которым я не слишком знаком.

У меня есть функция fetchInst(location), который принимает адрес памяти (как в индексе для имитируемого массива памяти ЦП, а не фактический указатель C ++) и возвращает объект структуры, который включает в себя код операции, режим адресации и, в идеале, список операндов, которые являются отношение к инструкции.

Проблема в том, что каждая операция требует различного набора операндов, и даже это зависит от режима адресации. Например, для одной инструкции может потребоваться только одно 8-разрядное целое число в качестве операндов, в то время как для другой команды может потребоваться, например, два 8-разрядных целых числа и 16-разрядное целое число для своих операндов.

по существу организация произвольных двоичных данных инструкции, например

1011011110101000100011100011011011100001

, в массив дискретных операндов, с которыми легче работать, например

  opcode     operand
[10110111], [10101000]

или

  opcode     operand     operand         operand
[10110111], [10101000], [10001110], [0011011011100001]

в зависимости от режима работы и адресации я не знаю, как это сделать эффективно.

Теоретически, наивным решением было бы дать исполняющей функции наибольшее число байтов после кода операции, которое она когда-либо могла нужно (вероятно, около 5), и полагаться на код выполнения для анализа операндов из необработанных байтовых данных, которые он дает, что может сработать, но я сильно сомневаюсь, что это самое эффективное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...