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