Dovrei creare programmi tipo questo:
;programma che acquisisce 2 numeri da tastiera,ne esegue la somma
;e visualizza il massimo dei due valori
;============================SEGMENTO STACK==============================
STACK SEGMENT PARA STACK 'STACK'
DB 100H DUP(0)
STACK ENDS
;============================SEGMENTO DATI==============================
DATA SEGMENT PARA PUBLIC 'DATA'
MAGGIORE DB 0
TOTALE DB 5 ;quanti numeri contiene il vettore
VETTORE DB 5 DUP(0)
SOMMA DW 0 ;risultato della somma
DIECI DB 10 ;conversione ASCII-numero
DIECIW DW 10 ;conversione nuero-ASCII
ACCAPO DB 13,10,'$'
MSGX DB 'IMMETTERE UN VALORE : $'
MSG1 DB 'LA SOMMA RISULTA= $'
MSG2 DB ': $'
MSG3 DB 'IL MASSIMO ? $'
DATA ENDS
;============================SEGMENTO CODICE============================
CODE SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
;================prologo standard=========================
ASSUME CS:CODE
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV ES,AX
ASSUME ES:DATA
MOV DS,AX
ASSUME DS:DATA
;=======================MAIN=====================
CALL ACQUISIZIONE
CALL CALCOLO
CALL OUTPUT
CALL MASSIMO
CALL OUTPUT1
RET
;=========================PROCEDURE=======================
;-------------------------------------------------------------------------
INPUT PROC NEAR
XOR DX,DX
LEA DX,MSGX
CALL VISUAL
CALL INPUT_N ;acquisisce un valore e pone il risultato in AL
RET
INPUT ENDP
;-------------------------------------------------------------------
ACQUISIZIONE PROC NEAR
XOR AX,AX
XOR BX,BX
XOR CX,CX
MOV CL,5
CICLO: CALL INPUT
MOV VETTORE[BX],AL
INC BX
LOOP CICLO
RET
ACQUISIZIONE ENDP
;-------------------------------------------------------------------
CALCOLO PROC NEAR
XOR AX,AX
XOR BX,BX
XOR CX,CX
MOV CL,TOTALE
CICLOX: ADD AL,VETTORE[BX]
INC BX
LOOP CICLOX
MOV SOMMA,AX
RET
CALCOLO ENDP
;==================================================================
MASSIMO PROC NEAR
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
MOV CL,VETTORE[BX]
INC BX
MOV DL,VETTORE[BX]
INC BX
CMP CL,DL
JB MASS
MOV MAGGIORE,CL
JMP FINE
MASS: MOV MAGGIORE,DL
FINE: RET
MASSIMO ENDP
;-------------------------------------------------------------
OUTPUT1 PROC NEAR
PUSH AX
PUSH DX
LEA DX,MSG3
CALL VISUAL
MOV AL,MAGGIORE
CALL STAMPA_N
LEA DX,ACCAPO
CALL VISUAL
POP DX
POP AX
RET
OUTPUT1 ENDP
;------------------------------------------------------------
OUTPUT PROC NEAR
PUSH AX
PUSH DX
LEA DX,MSG1 ;'LA SOMMA è= $'
CALL VISUAL ;stampa stringa puntata da DS:DX mediante INT 21h,09h
MOV AX,SOMMA
CALL STAMPA_N ;stampa il risulato
LEA DX,ACCAPO ;passaggio alla riga successiva
CALL VISUAL
POP DX
POP AX
RET
OUTPUT ENDP
;-------------------------------------------------------------------------
;Input di numero decimale < 256 (byte)da tastiera: in AL
Input_N PROC NEAR
PUSH BX
PUSH CX
PUSH DX
XOR AX,AX ;Inizializza AX
MOV CX,5 ;Lettura di massimo 3 caratteri
Ciclo1: CALL Char_N ;Input di un carattere ASCII in DL
CMP DL,13 ; INVIO = DEC 13 in ascii
JE VerificaB ;E' stato premuto INVIO?
SUB DL,'0' ;Conversione ASCII-numero
MUL dieci ;AX <- dieci * AL
ADD AL,DL
LOOP Ciclo1 ;salta se meno di tre cifre
VerificaB: CMP AX,256
JB Fuori ;E' stato effett letto un byte?
LEA DX,msgx ;puntatore del messaggio in DX
CALL VISUAL ;Stampa la stringa puntata da DX
XOR AH,AH
CALL Stampa_N ;Stampa del byte utilizzato
Fuori: LEA DX,accapo ;Passaggio alla riga successiva
CALL VISUAL ;Stampa la stringa puntata da DX
POP DX
POP CX
POP BX
RET
Input_N ENDP
;--------------------------------------------
;Input da tastiera di cifra '0'..'9','INVIO', resa in DL
Char_N PROC NEAR
PUSH AX
Ripeti: MOV AH,1
INT 21h
MOV DL,AL
CMP DL,13
JE Char_N_Ok ;E' stato premuto INVIO?
CMP DL,'0'
JB Indietro ;Il carattere è < '0'?
CMP DL,'9'
JBE Char_N_Ok ;Il carattere <= '9'?
Indietro: PUSH BX
MOV AH,3 ;servizio 3:acquisizione cursore
MOV BH,0 ;pagina 0
INT 10h ;DH riga DL colonna
DEC DL
MOV AH,2 ;servizio 2:definizione cursore
INT 10h
POP BX
JMP Ripeti ;rilegge il carattere
Char_N_Ok: POP AX
RET
Char_N ENDP
;-------------------------------------------------
;-------------------------------------------------------------------
;la proceduta VISUAL stampa la stringa puntata da DS:DX mediante INT 21h,09h
VISUAL PROC NEAR
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
VISUAL ENDP
;-------------------------------------------------------------------------
;la procedura STAMPA_N scrive a video il valore di AX come stringa di cifre
STAMPA_N PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0 ;inizializza il numero di cifre
CICLO2: MOV DX,0
DIV DIECIW
ADD DX,'0'
PUSH DX ;salvataggio cifra
INC CX
CMP AX,0
JNE CICLO2 ;ci sono altre cifre?
MOV AH,2
CICLO3: POP DX
INT 21H
LOOP CICLO3
POP DX
POP CX
POP BX
POP AX
RET
STAMPA_N ENDP
;-----------------------------------------------------------------------------
MAIN ENDP
CODE ENDS
END MAIN
solo che non so come procedere
cerco del materiale che mi faccia capire come si scrive un carattere o numero sul video, come si fa il calcolo