1

我正在尝试编写一个 cpu 模拟器。但是,当遇到 bne 指令时,它似乎没有按预期运行。bne 的性能与 bqe 相同。bqe 似乎工作正常:

Mux2_32(mbranchAddress, pcPlus4, branchAddress, AND2_1(zero, branch));
Mux2_32(pc, mbranchAddress, jumpAddress, jump);

if(!strcmp(opcode, "000101")&& !strcmp(branch, "1")){ /*bne instruction, ("000101" is the opcode for bne)*/
Mux2_32(mbranchAddress, pcPlus4, branchAddress, AND2_1(NOT_1(zero), branch));
Mux2_32(pc, mbranchAddress, jumpAddress, jump);
}

“分支”是当指令是分支指令时引发的标志。零是单个位 alu 输出

MUX2_32(a, b, c, d) 的工作原理如下: a=b if d=0 a=c if d=1

其中 a、b 和 c 为 32 位长,d 为一位。

有人可以指出为什么 beq 指令可以正常工作,但 bne 不能。谢谢

4

1 回答 1

1

C 不支持二进制数常量。000101 是一个八进制数,值为 65...,而 '000101' 是一个 64 位宽的多字符常量。您需要使用十六进制数字,即十六进制的操作码 000101 是 0x5 ...

于 2013-08-17T15:15:03.230 回答