[zxspectrum] Re: ZXASM - problema con librerie

  • From: Luca Alimandi <luca.alimandi62@xxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Sun, 19 Jun 2016 17:56:58 +0200

Il 19/06/2016 17:36, Luca Alimandi ha scritto:

Questo è un quesito per EMG!

Ho un problema. Sto provando ad usare la funzionalità di ZXASM che permette di raccogliere nella cartella LIB parti di programma che possono essere riutilizzati in vari programmi, ossia delle librerie.

Accade però che se voglio utilizzare una variabile (diciamo, globale, per usare la terminologia generale della programmazione) in modo che sia il programma principale che la libreria possano accedere a tale variabile, il compilatore mi dice che c'è una "undefined label" e non riesce a compilare.

Esempio:

-- main.asm --

    org 30000
start    ld a, 0
    ld (var), a
    call invert
        ret

var    defb    0


-- LIB/invert.asm --

invert    ld a,(var)
    cpl
    ld (var),a
    ret


Se metto la definizione della variabile nel programma principale, l'errore di compilazione viene segnalato nella compilazione della libreria, e viceversa. Se la metto in entrambe, ciascuno vedrà una sua variabile locale, diversa da quella dell'altro, per cui non funzionerebbe come voluto.

C'è un modo per poter usare le variabili globali con le librerie?



A dire il vero un modo un po' improprio per definire la variabile in modo globale c'è, ma non è per niente elegante né pratico: basta definire la variabile in modo assoluto.

Esempio:

-- main.asm --

        org 30000
start   ld a, 1
        ld (var), a
        call invert
        ret

var     equ 30025


-- LIB/invert.asm --

invert  ld a,(var)
        cpl
        ld (var),a
        ret
        
var     equ 30025

In questo modo la variabile è definita in modo univoco sia per il programma pricipale che per la libreria, e il tutto funziona correttamente. Però non è il modo corretto di procedere, perché in genere quando si sviluppo non si stabiliscono posizioni di memoria a priori, ma si lascia che le variabili si "spostino" dinamicamente con il crescere delle righe di programma...

--

|_ /-\


Other related posts: