我正在为我的班级编写一个简单的程序,除了条件分支(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
再次感谢!