bigdemounter wrote: Подскажите, зачем это нужно и где применяется функция загрузки числа в аккумулятор при возврате из подпрограммы.
Обычно такой способ применяется в микропроцессорах, где нет средств косвенного обращения к массиву чисел.
В частности, это характерно для микроконтроллеров PIC.
Но в них в большей мере это происходит из-за разделения памяти на память программ и память данных.
Чтобы считать массив из памяти программ как раз и используется возврат из подпрограммы с числом
в аккумуляторе - инструкция
retlw byte.
Под спойлером пример кода для
PIC16F84:
Код для PIC16F84Code: Select all
; Pitch lookup function
; w - аккулулятор PIC16F84, retlw - Return and Load W
pitchtable clrf PCLATH ; Clear PCLATH for zero page
addwf PCL,F
retlw 0x11 ;C5 // Midi Code 60
retlw 0x1F ;C#
retlw 0x2B ;D
retlw 0x37 ;D#
retlw 0x42 ;E
retlw 0x4D ;F
retlw 0x57 ;F#
retlw 0x61 ;G
retlw 0x6A ;G#
retlw 0x72 ;A (440)
retlw 0x7A ;Bb
retlw 0x81 ;B
retlw 0x89 ;C6 // Midi Code 72
retlw 0x8F ;Db
retlw 0x96 ;D
retlw 0x9C ;Eb
retlw 0xA1 ;E
retlw 0xA7 ;F
retlw 0xAC ;F#
retlw 0xB0 ;G
retlw 0xB5 ;Ab
retlw 0xB9 ;A (880)
retlw 0xBD ;Bb
retlw 0xC1 ;B
retlw 0xC4 ;C7 // Midi Code 84
retlw 0xC8 ;Db
retlw 0xCB ;D
retlw 0xCE ;Eb
retlw 0xD1 ;E
retlw 0xD3 ;F
retlw 0xD6 ;F#
retlw 0xD8 ;G
retlw 0xDA ;Ab
retlw 0xDC ;A (1760)
retlw 0xDE ;Bb
retlw 0xE0 ;
retlw 0xE2 ;C8 // Midi Code 96
Аппаратное воплощение такой функции довольно несложно.
Я, к примеру, использовал его в своём самодельном
4-bit Processor.
В системе команд у меня там есть команда
RET NIBBL - это как раз возврат из подпрограммы
с константой
NIBBL в
регистре A.