Прыгать без изменения стека - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать подпрограмму, которая печатает строку с нулевым символом в конце, но она не работает.в моей первой попытке:

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

Это закончилосьтоже неудача, потому что она по какой-то причине повторяла первый символ строки.Что происходит и что мне делать, чтобы это исправить?

1 Ответ

0 голосов
/ 22 декабря 2018

Эмулятор неточный.он изменяет стек, когда выполняет инструкцию jp, хотя и не должен.Я поищу другой эмулятор.Не используйте эмулятор ZEMU.

...