2014-09-20 111 views
0

我有一个程序,它接收汇编代码的文本文件并解析它,并将每行更改为二进制代码。每行是一个单独的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位(值)。我现在试图解析二进制代码的这三个单独的部分。我写了下面这样做:

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 =千兆)。我使用上面的代码将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 

我缺少/做错了什么?任何帮助表示赞赏。

回答

1

右移9个位置得到指令var intsr = op >> 9;它将包含7位指令。立即(1位位置9)和值的测试可以仅使用&:op & 256和值op & 255完成。

+0

非常感谢,我以相反的方式去做,显然,我明白它现在的工作原理。代码也运行它现在应该如何,再次感谢! – VakarianWrex 2014-09-20 04:42:28

相关问题