我正在阅读一个文本文件,其中包含汇编语言程序(例如MOV A B; LDA 1600等)。我想将此助记符代码转换为目标代码(不在同一文件中,而是直接将其打印到控制台中)。

对于MOV,我将其替换为01,A替换为111,B替换为000,C替换为001,D替换为010。
但是我应该如何替换MVI R,32操作码是00rrr110 0011 0010
请提出一种通用算法。

最佳答案

首先在操作码中将rrr替换为000,结果为00000110=0x06。然后从查找表中获取与您的寄存器对应的值(A = 111,B = 000,C = 001,依此类推),并使用<<运算符将其向左移动3个位置。最后,将两个值一起OR如下所示:

声明此代码以便在需要rrr的任何地方使用:A在索引0处,B在索引1处,然后是C,D,E,H和L

static int registerLookup[] = {0x07, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05}


对于MVI,请使用以下代码:

int baseOpcode = 0x06; // MVI
int opcode = baseOpcode | registerLookup[regIndex]<<3;

10-05 18:59