Microcomputer: tecniche di programmazione in assembly

Giuliano Donzellini, Domenico Ponta

Gestione di stringhe in assembly

110040

 

v1.71

Una stringa è una sequenza di caratteri codificati, terminata con un codice NULL (00h). La stringa è memorizzata come un vettore di codici ASCII, in locazioni di memoria contigue (ciascuna locazione conterrà il codice di un carattere). Per convenzione, l'indirizzo della stringa è l'indirizzo del suo primo carattere.


a) Copiare una stringa

Scrivere un sottoprogramma che copi in RAM una certa stringa, definita a vostra scelta. Il sottoprogramma copierà la stringa all'indirizzo che il chiamante richiede nel registro HL (suggeriamo di definire una stringa molto corta, composta ad esempio da una dozzina di caratteri al massimo).

Per verificare il funzionamento del sottoprogramma, occorre scrivere anche un programma principale, collegato al RESET hardware. Il programma principale, dopo la inizializzazione del puntatore alla catasta (Stack Pointer), chiamerà il sottoprogramma alcune volte, per copiare la stessa stringa in differenti locazioni di RAM. Il programma principale sarà poi riutilizzato, con le modifiche del caso, per provare i sottoprogrammi descritti nei punti seguenti. Un click qui aprirà una traccia del programma nel Deeds-McE. Dopo avere completato e salvato il programma, occorre verificarlo, utilizzando il debugger interattivo.

Nota: si ripeta il salvataggio e la verifica per ciascuno dei programmi richiesti ai punti seguenti.


b) Calcolare la lunghezza di una stringa

Scrivere e verificare un altro programma, che chiami un sottoprogramma in grado di calcolare la lunghezza di una stringa data, ossia il numero di caratteri che la compongono, escludendo dal conto il carattere NULL di terminazione).

Il nuovo sottoprogramma riceve l'indirizzo della stringa nel registro HL, e ritorna al chiamante la lunghezza della stringa nel registro BC (in modo da essere in grado di contare la lunghezza di stringhe lunghe). Nella traccia qui scaricabile trovate anche alcuni suggerimenti.


c) Ricerca di un carattere in una stringa

Scrivere e verificare ancora un altro programma, che chiami un sottoprogramma che ricerchi nella stringa la presenza di uno specifico carattere ASCII.

Il chiamante indica al sottoprogramma il carattere da cercare passandogli il suo codice ASCII nel registro A. L'indirizzo della stringa in cui cercare il carattere sarà specificato, come nei casi precedenti, tramite il registro HL. In uscita, il sottoprogramma restituirà la posizione del carattere nel registro BC (la posizione del primo carattere è pari a 1, i successivi nell'ordine, 2, 3, eccetera; se il carattere non è presente, il sottoprogramma ritorna '0'). Nella traccia allegata è disponibile il codice da completare.