* AIS:
* 1) Создание в стеке пространства для локальных переменных
* SP - - > | |
* - - - - - - - - - ^
* | | |
* | Пространство | |
* | локальных | |
* | переменных | |
* | | Уменьшение
* - - - - - - - - - адреса
* |PC (Старший байт)|
* - - - - - - - - -
* |PC (Младший байт)|
* - - - - - - - - -
* | |
*
* Примечание: SP всегда должен указывать на следующий неиспользованный байт,
* т.е. этот байт (0, SP) для хранения не используется
*
*
*
*
Метка Операция Операнд Комментарий
* SUB1 AIS #-16 ; Создание 16 байтов локального пространства
* .
* .
* .
* .
AIS #16 ; Очистка стека (Примечание: AIS не модифицирует CCR)
RTS ; Возврат
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 2) Проводка параметров через стек
*
*
Метка Операция Операнд Комментарий
PARAM1RMB 1
PARAM2RMB 1
*
*
LDA PARAM1
PSHA ; Занесение в стек делимого
LDA PARAM2
PSHA ; Занесение в стек делителя
JSR DIVIDE ; Деление 8/8
PULA ; Получение результата
AIS #1 ; Очистка стека (CCR не модифицируется)
BCS ERROR ; Проверка результата
* .
ERROR EQU *
* .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ДЕЛЕНИЕ: Деление 8/8
*
* SP - - > | |
* - - - - - - - - - -
* | A |
* - - - - - - - - - -
* | X |
* - - - - - - - - - - ^
* | H | |
* - - - - - - - - - - |
* |PC (Старший байт)| |
* - - - - - - - - - - |
* |PC (Младший байт)| |
* - - - - - - - - - - |
* | Делитель |
* - - - - - - - - - - Уменьшение
* | Делимое | адреса
* - - - - - - - - - -
* | |
*
* Вход: Делимое и делитель в стеке по SP,7 и SP,6, соответственно
*
* Выход 8-разрядный результат размещается в стеке по SP,6
* A, H:X остаются неизменными
*
*
Метка Операция Операнд Комментарий
DIVIDE PSHH ; Сохранение H:X, A
PSHX
PSHA
LDX 6, SP ; Делитель - > X
CLRH ; 0 - > MS делимого
LDA 7, SP ; Делимое - > A
DIV
OK STA 6, SP ; Сохранение результата
PULA ; Восстановление H:X, A
PULX
PULH
RTS
*
* * * * * * * * * * * * * * * * * * * * * *
|