PSP equ h’40’; Указатель псевдостека
TOS equ h’50’; Исходная вершина стека
INDF equ 0; Регистр косвенной адресации
FSR equ 04; Индексный регистр
XCAND equ h’46’; Множимое STATUS
equ 3; Регистр STATUS
С equ 0; Флаг переноса — бит 0
; Основная процедура инициализирует указатель стека PSP
MAIN movlw TOS; Устанавливаем PSP
movwf PSP; на исходную вершину стека
; .................... т. д.
; Подготовка к вызову подпрограммы X10
movf PSP,w; Устанавливаем FSR на текущую
movwf FSR; позицию в стеке
; Теперь заносим множимое в стек
movf XCAND,w; Копируем множимое в W,
movwf INDF; а затем помещаем его в стек
call X10; Теперь вызываем подпрограмму
; При возврате из подпрограммы PSP возвращается в исходную позицию; а произведение располагается по адресу PSP+3:PSP+2
NEXT_MAIN ... ...; Продолжение основной программы
В Программе 6.13 сначала производится сдвиг множимого влево на один бит (умножение на два), а затем еще на два бита (умножение на 8). Два получившихся 16-битных числа затем складываются, образуя искомое произведение. Точно так же, как и в Программе 6.8, производится манипулирование регистром FSR для доступа к соответствующим данным. Двухбайтное произведение может быть считано вызывающей программой по смещению относительно указателя псевдостека. В отличие от Программы 6.8, в данном случае PSP не затрагивается ни когда в стек заносится множимое, ни в самой подпрограмме. Так сделано потому, что эта подпрограмма не вызывает других подпрограмм, т. е. не требуется формирования нового стекового фрейма.