Ciao a tutti!!
ho un piccolo problema.. io per stampare le stringhe ho sempre usato la 09h dell'interruzione 21h... ma come posso fare per stampare numeri?... esiste già una funzione oppure me la devo fare?..
grazie e ciao a tutti!!!
Ciao a tutti!!
ho un piccolo problema.. io per stampare le stringhe ho sempre usato la 09h dell'interruzione 21h... ma come posso fare per stampare numeri?... esiste già una funzione oppure me la devo fare?..
grazie e ciao a tutti!!!
"Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943
Ciao, per la mia esperienza (non molta) direi che non esiste
una funzione del genere. Quindi ti tocca scriverla...
Tempo fa avevo scritto questo codice, se ti va dagli un'occhiata.
Tieni presente (ripeto) che non ho una gran esperienza: ho fatto un po' di ASM giusto per provarlo ed ho sempre usato
emu8086. Non so se ci siano differenze nel linguaggio da un'ambiente ad un'altro.
Ciao
Simo
#make_COM#
; COM file is loaded at CS:0100h
; (the value of CS is set by Operating System)
ORG 100h
; Stampa a video il valore numerico di un byte.
; Supponiamo che il valore da convertire in stringa e stampare sia contenuto
; nel registro AX.
MOV AX, 254 ; 254 è il valore da stampare
; 1° divisione: per 100 (254 \ 100 = 2)
MOV BL, 100 ; BL = 100
DIV BL ; Esegue AX / BL (AL = 2, AH = 54)
MOV CL, AL ; Imposta CL all'intero della divisione (2)
ADD CL, 48 ; Esegue CL + 48 (Cod. ASCII di '0')
PUSH AX ; Immagazzina AX nello stack
; 1° stampa
MOV AL, CL ; Immagazzina in AL il byte da stampare
MOV AH, 0Eh ; stampa il carattere in modalità teletype
INT 10h
POP AX ; Ripristina AX
; Aggiornamento
MOV AL, AH ; Copia AH in AL
MOV AH, 0 ; Azzera AH (high byte)
; 2° divisione
MOV BL, 10 ; BL = 10
DIV BL ; Esegue AX / BL (Al = 5, AH = 4)
MOV CL, AL ; Imposta CL all'intero della divisione (5)
ADD CL, 48 ; Esegue CL + 48 (Cod. ASCII di '0')
PUSH AX ; Immagazzina AX nello stack
; 2° stampa
MOV AL, CL ; Immagazzina in AL byte da stampare
MOV AH, 0Eh ; stampa il carattere in modalità teletype
INT 10h
POP AX ; Ripristina AX
; 3° stampa:
; ripristinato AX, AH = 4
MOV AL, AH ; Immagazzina in AL il byte da stampare
ADD AL, 48 ; Esegue AL + 48 (Cod. ASCII di '0')
MOV AH, 0Eh ; stampa il carattere in modalità teletype
INT 10h
Esiste l'interruzione 2 della 21h. Stampa il carattere contenuto in DL. Se devi sommare un numero però dopo averlo messo in dl devi sommare 30h per averne il codice ASCII
grazie mille... cmq cosa sarebbe la modalità teletype? e poi int 10h non è l'interuzione della scheda grafica?... inoltre una cosa... io voglio imparare bene linguaggio macchina nei com.... ma è vero che nei com è possibile usare un solo segmento? e poi come potrei fare per fare degli exe invece che dei .com? grazie mille ciao ciao!!![]()
"Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943