Я пытаюсь создать подпрограмму, которая печатает строку с нулевым символом в конце, но она не работает.в моей первой попытке:
PRINTLN: ld a, (bc) // set bc to start of string before calling
add a, 0 // update zero flag
jp z, endprint // if the character at (bc) is a null, terminate loop
out 1, a // output to port 0 (TTY in emulator)
inc bc // point to next character
jp println // rinse and repeat
ENDPRINT: ret // end of subroutine
он просто повторял строку, пока не остановился по какой-то причине.Мой эмулятор не позволяет мне просматривать стек.Следующая попытка состояла в том, чтобы поместить адрес от PRINTLN
до de
перед циклом, а затем просто нажать de
и использовать ret
вместо jp
:
PRINTLN: ld de, printloop // attempt to get rid of jp's effect on the stack
PRINTLOOP: ld a, (bc) // set bc to start of string before calling
add a, 0 // update zero flag
jp z, endprint // if the character at (bc) is a null, terminate loop
out 1, a // output to port 0 (TTY in emulator)
inc bc // point to next character
push de // I hope this works
ret // rinse and repeat
ENDPRINT: ret // end of subroutine
Это закончилосьтоже неудача, потому что она по какой-то причине повторяла первый символ строки.Что происходит и что мне делать, чтобы это исправить?