And logico

; AND logico tra i singoli byte di serie1 con serie2; risultato in serier

data segment
serie1 db 0aah, 0cdh, 1eh, 34h, 32h, 0f4h, 59h, 0d3h ;variabile di 8 byte inizializzati rispettivamente con 0aah, 0cdh,…
serie2 db 0deh, 65h, 7fh, 8ah, 0d4h, 32h, 69h, 0feh   ;variabile di 8 byte
serier db 8 dup(?) ;DUP (duplicate) 8 byte non inizializzati (?): valore indefinito

pkey db “press any key…$”
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set registri di segmento
mov ax, data
mov ds, ax
mov es, ax

lea si,serie1                                          ;in SI indirizzo di serie1
lea bx,serie2                                        ;in BX indirizzo di serie2
mov di,offset serier                             ;in DI indirizzo di serier

ciclo:
mov al,[si]                                        ;in AL valore contenuto nella cella di indirizzo [SI]
and al,[bx]                                       ;AND del valore contenuto in AL con il valore contenuto
;nella cella di indirizzo [BX]              ; risultato in AL
mov [di],al                                      ;il valore di AL viene copiato nella cella di indirizzo [DI]

inc si ;incremento degli indirizzi
inc bx
inc di
cmp si,08d
jne ciclo ;cicla fino a quando non si sono presi tutti gli 8 byte

;——– operazioni di chiusura
lea dx, pkey
mov ah, 9
int 21h ; output della stringa di indirizzo ds:dx

; aspetta la pressione di un tasto
mov ah, 1
int 21h

mov ax, 4c00h ; ritorno al sistema operativo
int 21h
ends

end start

Lascia un commento