Как написать игру для ZX Spectrum на ассемблере


         

Теперь относительно условных переходов. Эти


Теперь относительно условных переходов. Эти команды также начинаются с JP или JR, но в поле операндов записывается мнемоника проверки одного из возможных флагов и после запятой - имя метки или абсолютный адрес, например:

JP Z,8252 ;переход по адресу 8252, если ; установлен флаг нуля JR NC,MAIN ;относительный переход на метку MAIN, ; если флаг переноса сброшен

Перечислим мнемоники всех возможных условий:


  • Z - если ноль (установлен флаг нуля Z);


  • NZ - если не ноль (флаг нуля Z сброшен);


  • C - если перенос (установлен флаг переноса CY);


  • NC - если нет переноса (флаг переноса CY сброшен);


  • M - если отрицательный результат (установлен флаг знака S);


  • P - если результат положительный (флаг знака S сброшен);


  • PE - если четность или переполнение (установлен флаг P/V);


  • PO - если нет четности/переполнения (флаг P/V сброшен).


  • Для флагов H и N условия отсутствуют, так как они используются только в неявном виде командами коррекции двоично-десятичных чисел.

    Здесь нужно еще добавить, что в команде JP возможно применение всех перечисленных мнемоник условий, а с командой JR допускаются только первые четыре: Z, NZ, C и NC.

    Зная все это, можно наконец написать цикл. В общем виде он будет выглядеть так:

    LD E,N ;заносим в регистр E счетчик ; количества повторений цикла N LOOP PUSH DE ;сохраняем его в стеке ......... ;тело цикла POP DE ;восстановление счетчика DEC E ; и уменьшение его на единицу JR NZ,LOOP ;переход на начало цикла, если счетчик ; не обнулился (в самом общем случае ; здесь может находиться инструкция ; JP NZ,LOOP)


    Содержание  Назад  Вперед