Компилятор выдаёт ошибку
invalid literal constant pool needs to be closer
при запуске следующего кода:
printregs
printregs
exit
Макрос printregs:
var ascii spaceSym " "
var ascii nSym "\n"
.macro printregs
loadregs
printnum var_r0
writestr spaceSym 1
printnum var_r1
writestr spaceSym 1
printnum var_r2
writestr spaceSym 1
printnum var_r3
writestr spaceSym 1
printnum var_r4
writestr spaceSym 1
printnum var_r5
writestr spaceSym 1
printnum var_r6
writestr spaceSym 1
printnum var_r7
writestr spaceSym 1
printnum var_r8
writestr spaceSym 1
printnum var_r9
writestr spaceSym 1
printnum var_r10
writestr spaceSym 1
printnum var_r11
writestr spaceSym 1
printnum var_r12
writestr spaceSym 1
printnum var_r13
writestr spaceSym 1
printnum var_r14
writestr spaceSym 1
printnum var_r15
writestr spaceSym 1
printnum var_a1
writestr spaceSym 1
printnum var_a2
writestr spaceSym 1
printnum var_a3
writestr spaceSym 1
printnum var_a4
writestr nSym 1
.endm
Макрос writestr:
.macro writestr mes length
mov r0, $stdout
ldr r1, =\mes
ldr r2, =\length
write
.endm
Макрос printnum:
var int bufForPrint 0
.macro printnum num
local loopForPrintNum1
local loopForPrintNum2
loadvar r1 \num
mov r4, $0
loopForPrintNum1:
push {r4}
mov r2, $10
udiv r3, r1, r2
mls r4, r2,r3,r1
add r4, $48
mov r1, r3
cmp r1, $0
bne loopForPrintNum1
push {r4}
loopForPrintNum2:
pop {r4}
storevar r4 bufForPrint
writestr bufForPrint 1
cmp r4, $0
bne loopForPrintNum2
.endm
Макрос loadvar:
.macro loadvar r var
ldr \r, =\var
ldr \r, [\r]
.endm
Макрос loadregs:
var int var_r0 0
var int var_r1 0
var int var_r2 0
var int var_r3 0
var int var_r4 0
var int var_r5 0
var int var_r6 0
var int var_r7 0
var int var_r8 0
var int var_r9 0
var int var_r10 0
var int var_r11 0
var int var_r12 0
var int var_r13 0
var int var_r14 0
var int var_r15 0
var int var_a1 0
var int var_a2 0
var int var_a3 0
var int var_a4 0
.macro loadregs
storevar r0 var_r0
storevar r1 var_r1
storevar r2 var_r2
storevar r3 var_r3
storevar r4 var_r4
storevar r5 var_r5
storevar r6 var_r6
storevar r7 var_r7
storevar r8 var_r8
storevar r9 var_r9
storevar r10 var_r10
storevar r11 var_r11
storevar r12 var_r12
storevar r13 var_r13
storevar r14 var_r14
storevar r15 var_r15
storevar a1 var_a1
storevar a2 var_a2
storevar a3 var_a3
storevar a4 var_a4
.endm
Макрос storevar:
.macro storevar r var
push {r0}
ldr r0, =\var
str \r, [r0]
pop {r0}
.endm
Макрос var:
.altmacro
.macro var type name val
.data
\name\(): .\type \()\val
.text
.endm
В чём могут быть причины ошибки и как их исправить?