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.