Programma Assembly con stampa di interi

di il
3 risposte

Programma Assembly con stampa di interi

Ciao a tutti sono nuovo di questo forum e ho da poco iniziato a programmare in assembly per 8086.
Dopo le prime nozioni di architettura dei calcolatori, numeri binari e aver fatto vari programmini di "hello world" mi sto dedicando alla creazione di un programma di somma di due numeri (dichiarati già all'interno del programma per rendere più semplice possibile il mio primo esempio) con stampa di risultato.
Ho un enorme problema perché non so dove inserire il risultato e come stamparlo. So stampare una stringa o un carattere con la chiamata dell'interrupt del DOS 21h con le direttive 09h per stampa di stringe e 02h per stampa di caratteri ma per stampare un intero come devo fare?
Vi posto qui sotto il codice:
;PROGRAMMA DI SOMMA
.MODEL small
.STACK 100h

dati SEGMENT
num1 db 10
num2 db 15
dati ENDS

codice SEGMENT
assume cs:codice, ss:stack, ds:dati

inizio:
mov ax,dati
mov ds,ax
mov al,num1
add al,num2
mov num1,al

;qui manca quello che mi serve ossia
;la stampa della somma contenuta in num1

mov ah,4Ch
int 21h
codice ENDS
END inizio
Spero di avere risposta alla mia domanda.
Grazie in anticipo.
Un saluto,
ScorpionX

3 Risposte

  • Re: Programma Assembly con stampa di interi

    Conosci le istruzioni di shift dei bit ?
    se le conosci utilizza quelle cosi puoi dividere le due cifre e stamparle separatamente.
    sommando 30h ad ogni cifra spacchettata.
    esempio:
    45
    separi le cifre 4 e 5 e poi fai:
    4 + 30h mov dl,risultato mov ax,0200h int 21h
    5 + 30h mov dl,risultato2 mov ax,0200h int 21h

    se non conosci le istruzioni di shift dei bit fammelo sapero cosi ti invio tutto il codice della parte che ti manca.

    spero di esserti stato di aiuto.
    saluti smalldragon
  • Re: Programma Assembly con stampa di interi

    Salve. se i numeri da sommare sono a cifra unica la cosa è piuttosto facile, mentre se i numeri sono a più cifer diventa più complicato perchè l'8086 legge e stampa solo seguendo la tabella ASCII...
  • Re: Programma Assembly con stampa di interi

    Quando il numero e' compreso tra 0-99 puoi usare quanto ti ho detto in precedenza e che ti ho riportato sotto in verde.
    metre se il numero è > 99 allora puoi usare la seguente strategia :
    ciclo migliaia :
    numero = numero - 1000
    migliaia = migliaia +1
    se numero < 1000 jl stampa migliaia
    ripeti ciclo migliaia
    stampa migliaia: stampi usando la tecnica usata in stampa cifre.
    ciclo centinaia:
    numero = numero - 100
    centinaia = centinaia +1
    se numero < 100 jl stampa centinaia
    ripeti ciclo centinaia
    stampa centinaia: stampi usando la tecnica usata in stampa cifre.
    stampa cifre:
    spacchetti le cifre usando le istruzioni di shitf dei bit
    sommando 30h ad ogni cifra spacchettata.
    esempio:
    45
    separi le cifre 4 e 5 e poi fai:
    4 + 30h mov dl,risultato mov ax,0200h int 21h
    5 + 30h mov dl,risultato2 mov ax,0200h int 21h

    spero di esserti stato di aiuto.
    saluti smalldragon
Devi accedere o registrarti per scrivere nel forum
3 risposte