我正在用C语言编写一个程序,将为the LC3 processor编译的hex文件转换回汇编语言。
目前,我正在尝试解码ADD
指令。
LC3汇编语言中有两种类型的ADD
:
例如,十六进制代码164F
将转换为:ADD R3, R1, R7
。这是一个参考添加。相反,153F
的十六进制代码将转换为:ADD R2, R4, #-1
。这是一个立即添加。
该功能应该适当地解码。
答案 0 :(得分:4)
我想知道我是否可以先得到一些帮助 function:void printAdd(int instruction);
嗯,函数本身已经假定你已经检测到操作码并相应地发送了,所以我们不需要在这里处理那部分。正如您所说,ADD
指令有两种形式。指令集引用将其结构显示为:
ADD DR, SR1, SR2 = 0001 DR SR1 0 0 0 SR2
ADD DR, SR, IMM5 = 0001 DR SR 1 IMM5
这意味着第5位区分两个版本。你需要在那个位上进行分支。除此之外,提取数字只是有点麻烦,简单的printf
,我希望你知道如何使用。类似的东西:
void printAdd(int instruction)
{
printf("ADD R%d, R%d, ", (instruction >> 9) & 7, (instruction >> 6) & 7);
if (instruction & 0x20)
{
printf("#%d\n", instruction & 0x1F);
} else {
printf("R%d\n", instruction & 7);
}
}
将立即符号扩展为练习;)