Risalve a tutti,sono alle prese con un nuovo esercizio in assembly che prevede la stampa di una matrice. Ho provato a cercare un po' di materiale in giro ,sia sul sito che su google,sulle matrici ma ben poco ho trovato(se avete qualche fonte non siate timidi a postarla^^). Vi posto ciò che ho scritto. Si tratta di un codice che dovrebbe stampare a video una matrice,commento per rendere il più chiaro possibile il tutto!
data segment 'DATA'
; La matrice è memorizzata per riga
mat db 1,2,3,4
db 5,6,7,8
db 9,0,4,5
colonne equ 4
data ends
stack segment 'STACK'
dw 128 dup(0)
stack ends
code segment 'CODE'
start:
mov ax,@data
mov ds, ax
mov al,0
;Calcolo posizione della riga nell'array fisico. Uso per gestire la matrice il comando
;indice di riga*colonna + indice di colonna ossia mat+i*c+j
cicloest:mov bl,colonne
mul bl ;moltiplico per colonne e il risultato lo trovo in ax
mov bx,ax ;sposto il risultato in ax
xor si,si ; Inizializzo indice di colonna assegnato a SI
mov cx,colonne ;muovo il numero di colonne in cx registro che serve
ciclo:
mov dl,mat[bx+si] ;mat[bx+si]=[mat+bx+si] ma bx=i*c quindi = [mat+i*c+j]
add dl,30h
mov ah,02h
int 21h ;uso la 02h per stampare a video l'elemento del vettore
mov dl," "
mov ah,02h
int 21h ;stampo a video lo spazio tra un elemento e l'altro
inc si
loop ciclo ;ciclo che continua fino a quando non termino le colonne
add al,1 ;passo alla riga successiva
cmp al,3 ;se sono arrivato alla terza riga ho finito
JL cicloest ;fino a quando è minore di 3 ripeto il ciclo
JMP fine
fine: NOP
mov ax, 4ch ; ritorna il controllo al Sistema Operativo
int 21h
end start ; Termina la fase di assemblaggio e imposta l'istruzione