Я пытаюсь создать программу, которая вычисляет длину строки строки, которую я должен проверять. Это то, что у меня есть, но это seg ошибки на ldrb r1, [r1]
. Я пытаюсь увеличить адрес, чтобы достигнуть следующего символа внутри строки.Как мне заставить эту программу ARM прекратить сегрегацию?
.section .data
.balign 4
scan_pattern: .asciz "%s"
.balign 4
string: .word 50
.balign 4
null_char: .byte '\0'
.balign 4
result: .asciz "%d"
.section .text
.global main
main:
ldr r0, =scan_pattern
ldr r1, =string
bl scanf
mov r0, #0
ldrb r1, [r1]
ldr r2, =null_char
ldrb r2, [r2]
bl count
count:
cmp r1, r2
bne incr
bl end_pro
incr:
add r1, r1, #1
add r0, r0, #1
bl count
end_pro:
ldr r1, [r0]
ldr r0, =result
ldr r1, [r1]
bl printf
mov r0, $0
bl fflush
nop @no operation
mov r7, $1 @exit syscall
svc $0 @wake kernel
.end
Вы s Вы знаете, что означает директива '.word'? – EOF
Это потому, что R1 не сохраняется вызовом 'scanf'. У вашего кода есть и ряд других ошибок. –