[zxspectrum] Re: ZXASM - problema con librerie
- From: Luca Alimandi <luca.alimandi62@xxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Sun, 19 Jun 2016 22:29:27 +0200
Il 19/06/2016 19:37, Enrico Maria Giordano ha scritto:
Il 19/06/2016 19:15, Luca Alimandi ha scritto:
Domanda: questa direttiva vale solo per DEFB, o per DEFW, o DEFM o per
tutte? Cioè con DEFP posso dichiarare solo una variabile byte, o anche
word e messaggi?
Ah, boh, non lo so. Prova.
C'è qualcosa che non va!...
Questo che allego è un programma di test, che richiama due funzioni
uguali ma una è locale, l'altra è di libreria.
La funzione altro non fa che incrementare il valore di una variabile. Il
programma principale inserisce il valore 0 nella variabile, richiama la
funzione, e poi stampa il risultato.
La funzione locale usa una variabile locale, e tutto funziona. Il valore
passa da 0 a 1, correttamente.
La funzione di libreria usa una variabile globale dichiarata con DEFP.
Dopo l'incremento, invece di vedere 1, esce il valore 243!...
Allego i listati per tua comodità, tanto sono brevissimi. Il file
incr2.asm è la funzione di libreria e va salvata nella directory LIB.
Quando puoi fai qualche prova e fammi sapere.
Grazie
--
|_ /-\
; test DEFP
org 30000
start ld a,0
ld (var),a
call incr ; (non usa la libreria...))
ld a,2 ; stampa il risultato
call 5633
ld a,22 ; AT
rst 16
ld a,10 ; y...
rst 16
ld a,10 ; x...
rst 16
ld a,(var)
ld b,0
ld c,a
call 6683
start2 ld a,0
ld (var2),a
call incr2 ; (usa la libreria...)
ld a,2 ; stampa il risultato
call 5633
ld a,22 ; AT
rst 16
ld a,12 ; y...
rst 16
ld a,10 ; x...
rst 16
ld a,(var2)
ld b,0
ld c,a
call 6683
ret
incr ld a,(var)
inc a
ld (var),a
ret
var defb 0
var2 defp 0incr2 ld a,(var2)
inc a
ld (var2),a
ret
Other related posts: