Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [asm]funzione per i numeri

    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

  2. #2
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    81
    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

  4. #4
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.