我正在阅读一个文本文件,其中包含汇编语言程序(例如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;