我有一个程序,它接收汇编代码的文本文件并解析它并将每一行更改为二进制代码。每行是一个单独的16位二进制代码(值存储为UInt 16),然后我将其放入数组中。代码是(以整数表示):
32768 //
65285 //
64514 //
65280 //
64512 //
65281 //
64513 //
36352 //
65025 //
63488 //
58899 //
38400 //
65024 //
64257 //
64512 //
65026 //
64258 //
61952 //
59911 //
42496 //
65026
现在每个代码如何被分解为7位(指令),1位(立即数),8位(值)。我现在正在尝试解析二进制代码的3个独立部分。我写了以下内容来做到这一点:
public void doInstruction()
{
foreach(var op in IPE.opCodes)
{
Console.WriteLine("this is the original op code: " + op);
var instr = (op >> 0) & 127;
Console.WriteLine(instr + " THIS IS THE INSTRUCTION BINARY");
}
}
现在例如,第一个代码(32768 = 1000000000000000)。我使用上面的代码将二进制代码32768与二进制代码127进行比较,在我看来应该产生1000000(64应该出现在输出中)。但在我运行我的代码之后。我的输出是:
this is the original op code: 32768
0 THIS IS THE INSTRUCTION BINARY
当输出应为:
this is the original op code: 32768
64 THIS IS THE INSTRUCTION BINARY
我在这里错过了什么/做错了什么?任何帮助表示赞赏。
答案 0 :(得分:1)
右移9个位置以获得指令var intsr = op >> 9;
它将包含7位指令。只需使用&:op & 256
和值op & 255
即可完成对即时(1位置9)和值的测试。