我在装配中创建迷宫生成器。现在在代码的这个特定部分,我试图保存在一维数组中表示的当前2D位置。我试图在.data。
部分中保存索引(.halfword)// R1 (CHOICE IS INPUT)
// R0 (CURRENT POS)
// R3 (ARRAY2D ADDRESS COPY)
// R2 (VAL TO STORE)
SETDIRECTIONS:
MOV R3, R4 // ARRAY2D ADDRESS
MOV R0, R5 // CURRENT POS
PUSH {R1}
LDRH R1, =POSORIGIN
STRH R0, [R1] // STORE POSITION ORIGIN
POP {R1}
CMP R1, #1
BEQ D1
CMP R1, #2
BEQ D2
...// More CMP and BEQ Below
.....
D1:
// UP ONLY
SUB R0, #17 // 1 ROW UP
ADD R3, R0 // BASE ADDRESS + CURRENT POS (1 ROW UP)
MOV R2, #3 // SET AS FLOOR
STRB R2, [R3] // STORE TO ARRAY
SUB R3, #17 // 1 ROW UP AGAIN
STRB R2, [R3] // SET AS FLOOR
.....
.section .data
POSORIGIN:
.hword 0
当我尝试编译代码时,汇编程序会发出错误
"错误:无效的文字常量:池需要更接近"
将SETDIRECTIONS
和其他函数放在更接近.data的部分解决它,但只是一个临时修复。我担心我的代码越长,我就越会遇到这个错误。
我搜索了一个修补程序并使用.ltorg
似乎解决了这些问题,但我不知道如何使用它,还没有足够的示例代码可以在互联网上搜索到正确使用
我用完了寄存器,r5-r10目前已经拥有了重要的东西。我可以将它们弹出堆栈来保存,但是我需要在一些多个嵌套函数中访问当前位置,其中push pop会让我很难追溯它。