Stampa questa pagina
Domenica, 26 Novembre 2017 16:47

Esempio 12: somma di due numeri letti in input

Scritto da

Vista la stampa, vediamo come si fa la fase di input da tastiera. Anche qui, c'è una combinazione fissa di valore/registro da impostare per "richiedere" alla CPU di procedere ad una operazione specifica di lettura.

; esempio 12
; leggi due numeri da tastiera, fai la somma, stampa risultato

.STACK
.DATA
addendo1 db ?
addendo2 db ?    

.CODE
.STARTUP
 
;attende un input
MOV AH, 08h
INT 21h ;il carattere viene salvato in AL  
SUB AL, 30h ; tolgo l'offset del carattere/numero
MOV addendo1, AL    

MOV AX,0000h ;pulisco il registro da eventuali errori: in c++ la gestisci la memoria?  
        
;attende un input
MOV AH, 08h
INT 21h ;il carattere viene salvato in AL   
SUB AL, 30h ; tolgo l'offset del carattere/numero
MOV addendo2, AL     
        
MOV AX, 0000h
MOV BL, addendo1
ADD BL, addendo2            
          
;stampo il carattere            
MOV AH,02h   
MOV DX,BX    ; copio il carattere in AL a DL per stamparlo
ADD DX,30h   ; aggiungo l'offset ascii per stampare il carattere equivalente numero
INT 21h
 
.EXIT
END

Se volessimo semplificare la notazione con le funzioni predefinite di lettura e scrittura a schermo avremmo:

include 'emu8086.inc'

.STACK
.DATA

.CODE
.STARTUP

;somma di due numeri inseriti da tastiera
PRINTN 'inserisci il primo numero'
call SCAN_NUM  ;scan_num restituisce la lettura dentro CX
mov ax, cx ;metto da parte dentro un registro, ad esempio cx

PRINTN 'inserisci il secondo numero'
call SCAN_NUM
add ax, cx

PRINTN 'il totale dei quattro numeri ='
call PRINT_NUM

;mi dichiaro delle funzioni
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS

.EXIT
END

{moduke bannerpiccolo}

La versione SASM, sempre semplificata, con registri a 32bit

Letto 292 volte
Prof. Alfredo Centinaro

Docente di "Scienze e tecnologie informatiche", "Tecnologie e progettazione di sistemi informatici", "Sistemi e Reti" presso IIS Alessandrini-Marino (Teramo), consulente e sviluppatore web. Ha collaborato per anni come sviluppatore presso MHT - Treviso, assistente Sistemi ed elaborazione dell'informazione in UniTE Corso di laurea in Scienze del turismo culturale, tutor presso Telecom Italia Learning Services (L'Aquila)

Joomla SEF URLs by Artio