8051: prosta procedura

0

Witam,
Napisałem prosty program w 8051, który ma w pamięci zewnętrznej zapisać liczby od 1 do 10. To działa.

Następnie chcę utworzyć procedurę do obliczania: f(x) = x^2 + 1, przy zalozeniu, ze wynik mnozenia jest na tyle maly, ze zmiesci sie w 8-bitowym rejestrze.

$include(REG51.inc)
    LJMP START
    ORG 100H

; counts f(x) = x^2 + 1
; procedures argument x: R6
; result: R7
LINEAR:
    PUSH ACC
    MOV A, R6
    MOV B, R6
    MUL AB
    INC A
    MOV R7, A
    POP ACC
RET
; procedures end
    
START:
    MOV R2, #5 ; liczba iteracji
    MOV R3, #1 ; wartosc poczatkowa
    MOV DPTR, #10h ; adres w pamieci zewnetrznej, gdzie zaczynam zapisywac
    PUSH DPH
    PUSH DPL
    MOV A, R2
NEXT:
    ; zapisz liczby od 1 do 5 w pamieci zewnetrznej
    PUSH ACC
    CLR A
    MOV A, R3
    MOVX @DPTR, A
    INC DPTR
    INC R3
    POP ACC
    DEC ACC
    JNZ NEXT
    POP DPL
    POP DPH
    ; oblicz f(x)=x^2, argument pobierz z pamieci zewnetrznej
    MOVX A, @DPTR
    MOV R6, A
    LJMP LINEAR
    MOV A, R7
TEST_END:
    LJMP $
END

Pytanie: dlaczego RET nie wraca do kodu głównego i nie wykonuje instrukcji MOV A, R7.

Pozdrawiam.

0

trochę strzał ale może RETI ?

1

Nie znam się konkretnie na 8051, lecz czy to:
LJMP LINEAR
Nie powinno być czymś w rodzaju CALL LINEAR?

2

LCALL LINEAR

0

To było to, dzięki _13th_Dragon.

1 użytkowników online, w tym zalogowanych: 0, gości: 1