条件分支(BNE)始终注册为相等。国旗没有设定?

时间:2016-11-21 23:37:54

标签: assembly arm

我正在为我的班级编写一个简单的程序,除了条件分支(BNE)之外,一切似乎都在工作。我在我的SUBS或BNE系列中遇到问题。

        LDR R4, =input @ input between 1 and 6
        LDR R5, =secret @ a "secret" number(4) set in the .data section
        SUBS R7, R5, R4 @ R7=R5-R4 and set flags
        BNE else @Branch if zero flag is not set

我尝试过使用CMP代替SUBS,但遇到了同样的问题

我的完整代码:

.data
.balign 4
intro: .asciz "Guess the number (1-6):  "

.balign 4
win: .asciz "You win!\n"

.balign 4
lose: .asciz "Wrong!\n"

.balign 4
input: .word #0

.balign 4
secret: .word #4

.text
.global _start
_start:
        MOV R7, #4
        MOV R0, #1
        MOV R2, #24
        LDR R1, =intro
        SWI 0

        MOV R7, #3
        MOV R0, #0
        MOV R2, #1
        LDR R1, =input
        SWI 0

        BAL if
if:
        LDR R4, =input
        LDR R5, =secret
        SUBS R7, R5, R4
        BNE else

        MOV R7, #4
        MOV R0, #1
        MOV R2, #12
        LDR R1, =win
        SWI 0

        BAL end
else:
        MOV R7, #4
        MOV R0, #1
        MOV R2, #12
        LDR R1, =lose
        SWI 0
end:
        MOV R7, #1
        SWI 0

非常感谢任何帮助!谢谢!

编辑: 我将我的代码修改为:

LDR R4, =input
LDR R1, [R4]
LDR R5, =secret
LDR R2, [R5]
SUBS R3, R1, R2

但是BNE仍然无法正常工作。我运行了dbg,这些是SUBS之前的寄存器:

r0    0x1      1  
r1    0x34     52 @SHOULD be "input", I entered 4
r2    0x4      4  @ the "secret" number
r3    0x0      0
r4    0x20130  131376  @the address of input
r5    0x20134  131380  @the address of secret
r6    0x0
r7    0x3
r8    0x0
r9    0x0
r10   0x0
r11   0x0
r12   0x0
sp    0x7efff790  0x7efff790
lr    0x0       0
pc    0x100b0   0x100b0 <if+16>
cpsr  0x10      16

我输入的错误是什么?我没有看到它有什么问题,但我对装配没有经验。

MOV R7, #3
MOV R0, #0
MOV R2, #1
LDR R1, =input
SWI 0

再次感谢!

0 个答案:

没有答案
相关问题