nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 26 May 2019 19:07



Reply to topic  [ 3 posts ] 
4004. Прыжок в подпрограмму. 
Author Message
Junior

Joined: 24 Jan 2017 09:26
Posts: 6
Reply with quote
Вот проверяю эту программу (в которой осуществляется переход в подпрограмму) в этом эмуляторе в пошаговом режиме.
Вот код программы
Code:
000 D0    LDM 0
001 B0    XCH R0
002 50 0A JMS $00A
004 50 0A JMS $00A
006 50 0A JMS $00A
008 40 10 JUN $010
00A A0    LD R0
00B F2    IAC
00C F2    IAC
00D F2    IAC
00E B0    XCH R0
00F C0    BBL 0

После команды
Code:
001 B0    XCH R0

в стек загружается адрес 3. По адресу 3 лежит байт 0A, но при возвращении из подпрограммы мы пропускаем байт 0A, и переходим сразу на адрес 4. Это, наверное, команда BBL так устроена (на схемотехническом уровне) чтобы выгружать из стека число, прибавлять к нему 1 и переходить на этот адрес?
Также команда BBL загружает в аккумулятор непосредственное число, записанное в команде (BBL 0 загужает ноль в аккумулятор). Подскажите, зачем это нужно и где применяется функция загрузки числа в аккумулятор при возврате из подпрограммы.


26 Dec 2018 15:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
bigdemounter wrote:
Подскажите, зачем это нужно и где применяется функция загрузки числа в аккумулятор при возврате из подпрограммы.

Обычно такой способ применяется в микропроцессорах, где нет средств косвенного обращения к массиву чисел.
В частности, это характерно для микроконтроллеров PIC.
Но в них в большей мере это происходит из-за разделения памяти на память программ и память данных.
Чтобы считать массив из памяти программ как раз и используется возврат из подпрограммы с числом
в аккумуляторе - инструкция retlw byte.

Под спойлером пример кода для PIC16F84:
 Код для PIC16F84
Code:
; 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.

_________________
iLavr


28 Dec 2018 04:26
Profile
Junior

Joined: 24 Jan 2017 09:26
Posts: 6
Reply with quote
Спасибо)


29 Mar 2019 08:56
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 3 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.