Indirizzamento diretto e indiretto
;Nel data segment, nelle celle di memoria di indirizzo 0000, 0001, 0002 vengono
;memorizzati rispettivamente i valori FF, FE, FD con 3 modalita’
;1) indirizzamento diretto: il valore contenuto in AL viene copiato in memoria
; nella cella indicata da […]
;2) indirizzamento indiretto tramite registro: il valore contenuto in AL viene copiato in memoria
; nella cella indicata da [BX]; l’operazione viene svolta con una sequenza di istruzioni.
;3) come il punto 2) ma utilizzando un ciclo
data segment
one dw ? ;dw define word: word tipo di variabile che occupa 2 byte
two dw ?
three dw ?
four dw ?
pkey db “press any key…$”
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set dei registri di segmento
mov ax, data
mov ds, ax
mov es, ax
mov al,0ffh ;valore offh nella parte bassa di AX (AL)
mov [0000h],al ;valore contenuto in AL (FFh) nella cella di indirizzo 0000h
dec al ;decremento al di 1 (valore in AL: FEh)
; word ptr e byte ptr si utlizzano per indicare in modo esplicito le dimensioni
; della memoria indirizzata; sono necessarie quando si memorizza un dato
; immediato in memoria; non sono necessari quando c’e’ lo scambio
; memoria-registro
;——– inizio modalita’ 1
mov byte ptr[0001h],al ;valore contenuto in AL (FEh) nella cella di indirizzo 0001h
dec al ;decremento al di 1 (valore in AL: FDh)
mov byte ptr[0002h],al ;valore contenuto in AL (FDh) nella cella di indirizzo 0002h
;—- azzera
mov bx,0000h
azzera:
mov [bx],00h
inc bx
cmp bx,03h
jne azzera ;jne jump if not equal: salto alla label azzera se BX <> 03h
;——– inizio modalita’ 2
mov bx,0000h
mov al,0ffh
mov [bx],al
dec al
inc bx
mov [bx],al
dec al
inc bx
mov [bx],al
;—- azzera
mov bx,0000h
azzera1:
mov [bx],00h
inc bx
cmp bx,03h
jne azzera1 ;jne jump if not equal: salto alla label azzera se BX <> 03h
;——– inizio modalita’ 3
mov bx,0000h
mov al,0ffh
salto:
mov [bx],al
dec al
inc bx
cmp bx,03h
jne salto ;jne jump if not equal: va alla label salto se BX <> 03h
;——– operazioni di chiusura
lea dx, pkey
mov ah, 9
int 21h ;output della stringa indirizzata da ds:dx
; aspetta per la pressione di un tasto
mov ah, 1
int 21h
mov ax, 4c00h ; ritorno al sistema operativo
int 21h
ends
end start