PDA

Visualizza la versione completa : [asm]funzione per i numeri


I'mtheleader
02-10-2004, 19:58
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!!!

SimoneVB
02-10-2004, 21:23
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

kerbero
03-10-2004, 10:09
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

I'mtheleader
03-10-2004, 12:57
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!! :unz:

Loading