При использовании следующего кода под GDB
.global main
main:
push {r0-r12,lr}
bl cls
ldr r0,=texte
a: ldrb r1,[r0],#1
pop {r0-r12,pc}
cls: push {r0-r2,lr}
pop {r0-r2,pc}
texte: .asciz "Hello World!"
Если я поставлю точку останова в строке ldr r0,=texte
, а затем выполню «следующую», программа не остановится при следующей инструкции. Она будет выполняться до конца.
Но если я удаляю инструкцию bl cls
или удаляю метку «a:», «next» работает нормально, то есть останавливается на инстансе «ldrb».
Я действительно не понимаю, почему.
Этот код ничего не значит. Это просто выдержка из более крупной программы, чтобы воспроизвести проблему.