我正在尝试编写一个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)的工作原理如下: 如果d = 0,则a = b a = c如果d = 1
其中a,b和c为32位长,d为单位。
有人可以指出为什么beq指令工作正常但是没有。感谢
答案 0 :(得分:1)
C不支持二进制数常量。 000101是一个八进制数,值为65 ......而'000101'是一个64位宽的多路常数。您需要使用十六进制数字,即十六进制中的操作码000101是0x5 ...