Мне очень трудно пытаться вызвать putchar в цикле, который печатает первый аргумент, отправленный через программу, написанную на ARM Assembly для raspberry pi. например . / Myprog1 hello должен вывести "hello" в консоли при запуске.
Код выглядит следующим образом:
.text
.balign 4
.global main
main:
LDR r4, [r1, #4] @ base address for argv[1]
MOV r5, #0 @ counter for loop
loop:
LDRB r0, [r4], #1 @ read each char byte in and increment
CMP r0, #0 @ #0 representing null terminator
BL putchar
ADDNE r5, r5, #1
BNE loop
end:
MOV r0, #0
BX lr
Я знаю, что есть очевидные проблемы, но относительно того, где я не уверен. Например. BL putchar должен вызвать putchar и поместить следующую инструкцию в регистр ссылок, но после возни с этим я получаю только первый символ.
Я обращался к таким ресурсам, как:
https://thinkingeek.com/arm-assembler-raspberry-pi/ и http://bob.cs.sonoma.edu/IntroCompOrg-RPi/intro-co-rpi.html но, похоже, я никак не могу обойти это. Я уверен, что это, вероятно, просто простое решение о перемещении и извлечении регистров в нужном месте или что-то подобное, но я застрял на этом в течение нескольких дней и не смог прогрессировать. Программе даже не нужно выводить аргумент - цикл предназначен для вычисления длины, но я хотел возиться с этим и учиться на вершине этого.
Это, конечно, не домашняя задача, а способ для меня отладить часть гораздо большего задания, которое мне нужно сделать.
Любая помощь будет принята с благодарностью!