01 Somma di due byte

Transcript

01 Somma di due byte
PROGRAMMA
01
Somma di due byte
#01 Testo del problema
Dati due byte residenti in memoria, depositare in una terza locazione la loro
somma.
#02 Analisi del problema
P
er sommare due byte non abbiamo alcun tipo di problema dal punto di
vista hardware: essendo il processore 8086 dotato di un circuito interno
per la somma aritmetica, possiamo tranquillamente utilizzare le rispettive
istruzioni per eseguire la somma.
L’unico problema a cui dobbiamo prestare sufficiente attenzione è quello
relativo all’eventuale overflow: eseguendo la somma tra due byte, infatti, è
possibile che questo risultato non sia contenibile in un byte, ma sia invece
necessaria una word. In realtà, trattandosi di due soli byte, basterebbero 1
byte più un eventuale bit per il riporto finale, ma ragionando dal punto di vista
software, l’elemento di definizione dato minimo dopo il byte è la word (2
byte).
#03 Progettazione delle routine
Nessuna routine necessaria.
#04 Registri utilizzati
Registri a 8 bit
AH
ƒ Parte alta della somma
AL
ƒ Primo addendo
ƒ Parte bassa della somma
Registri a 16 bit
Nessun registro a 16 bit utilizzato
1
#05 Codice del programma
p01.asm
;-------------------------------------; Direttive all'assemblatore
;-------------------------------------DOSSEG
; Segmentazione DOS
.MODEL small
; Modello di memoria
.STACK 100h
; Dimensione dello stack
;-------------------------------------; Data Segment
;-------------------------------------.DATA
X
db
30
; Primo addendo
Y
db
50
; Secondo addendo
S
dw
?
; Somma
;-------------------------------------; Code segment
;-------------------------------------.CODE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Programma principale
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Begin: StartupCode
; Inizio del programma
; Inizializzazione variabili
MOV
AL , [X]
; Prelevo il primo addendo
MOV
AH , 0
; Azzero il registro per il Carry
; Algoritmo
ADD
AL , [Y]
ADC
AH , 0
; Aggiungo il secondo...
; ...e l'eventuale Carry
; Salvataggio risultati
MOV
[S] , AX
; Salvo la somma
; Operazioni finali
ExitCode 0
END Begin
; Esecuzione corretta del programma
; Fine del programma
2
#06 Prove effettuate
Prova 01
Significato della prova
ƒ Prova con dati generici pseudo – casuali
Valori in input
X
=>
30
Y
=>
50
Valori attesi in output
S
=>
50h (80)
Valori ottenuti in output
S
=>
50h (80)
Prova 02
Significato della prova
ƒ Prova al limite inferiore
Valori in input
X
=>
00
Y
=>
00
Valori attesi in output
S
=>
00
Valori ottenuti in output
S
=>
00
Prova 03
Significato della prova
ƒ Prova al limite superiore
Valori in input
X
=>
FFh
Y
=>
FFh
Valori attesi in output
S
=>
01FEh
Valori ottenuti in output
S
=>
01FEh
3