Somma di due valori di 4 byte

;Somma di due valori di 4 byte
;Procedimento
;in ax i 2 byte meno significativi di n1: A005
;in bx i 2 byte meno significativi di n2: 8451
;somma (add) di ax e bx risultato in ax
;copia del risultato nella variabile ris
;in ax i 2 byte piu’ significativi di n1: B42F
;in bx i 2 byte piu’ significativi di n2: 2DD0
;somma (adc) di ax, bx e dell’eventuale riporto (carry) della somma precedente
;risultato in ax
;copia del risultato nella variabile ris (nella posizione [ris+2])

data segment
n1 dd b42fa005h     ;variabile di 4 byte dd = dword = double word
n2 dd 2dd08451h     ;variabile di 4 byte
ris dd ?     ;variabile di 4 byte
pkey db “press any key…$”
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

mov ax,word ptr[n1]
mov bx,word ptr[n2]
add ax,bx     ;somma di ax e bx risultato in ax ed eventuale carry
mov word ptr[ris],ax     ;copia del risultato in ris

mov ax,word ptr[n1 + 2]
mov bx,word ptr[n2 + 2]
adc ax,bx     ;adc: somma di ax,bx e flag di carry; risultato in ax

mov word ptr[ris + 2],ax     ;copia del risultato in ris+2

;——– operazioni di chiusura
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key….
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h
ends

end start

Lascia un commento