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

    [assembly 8086] stampare contenuto di un registro

    Ciao a tutti,

    ho fatto una semplice calcolatrice (che fa solo la somma) in assembly,
    da risultati corretti solo se il risultato della somma è inferiore a 9 dopo restituisce valori esadecimali. tipo
    9+9=B

    La mia domanda è questa ma se io ho un valore in un registro, come faccio a stampare il contenuto??
    ricordo che si tratta di assembly su un intel 8086. Ciao! Grazie
    LE DONNE:
    COME E' POSSIBILE SPERARE DI CAPIRLE SE LORO STESSE NON RIESCONO A FARLO?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il valore decimale lo devi trasformare in una sequenza di caratteri ASCII.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Devi ottenere ogni nibble e poi stamparlo, trasformandolo in ASCII.
    Per ottenere un nibble, metti in and il risultato con 0x000F, per il secondo con 0x00F0, ecc ...
    Ad esempio se hai:
    codice:
    ax = 000B;
    cx = ax AND 0x000F;
    ax = (VALORE_ASCII_DI_ZERO = 44) + cx;
    
    if ax > '9'; then
    ax = 'A' + ax % 10
    
    push ax
    call routine_di_stampa
    La routine di stampa dipende da te e dal sistema operativo.
    Se sei su win, o forse su bios, o forse su DOS: chiami la funzione 09h dell'interrupt 21h, mi sembra, e gli passi una stringa, terminata da '$', mettendola in dx, vai a guardarti la documentazione.
    Invece su linux, chiami la syscall write, numero 4, la metti in ax, poi passi tutti gli argomenti in ordine, per registro.
    Guardati il man: man 2 write.
    Su MacOSX non so', ci sarà la syscall apposta.
    Ciao,
    Grazie.

  4. #4
    (VALORE_ASCII_DI_ZERO = 48)

    Ho sbagliato scusate

  5. #5
    grazie per le risposte, oggi provo.
    Cmq purtroppo sono su windows xp emulato su qemu. Sto usando masm.
    Preferirei utilizzare linux ma non mi è riuscito assemblare nessun programma con nasm. Siccome ho un processore a 64 bit (e8400) è possibile creare codice per 8086 con nasm su linux? a me non è riuscito.
    LE DONNE:
    COME E' POSSIBILE SPERARE DI CAPIRLE SE LORO STESSE NON RIESCONO A FARLO?

  6. #6
    Fa così:
    codice:
    #Linux
    nasm -f elf file.asm -o file.o
    ld -o eseguibile file.o#Non mi ricordo i parametri, ma credo che basti.
    #Windows for VisualC++
    nasm -f win32 file.asm -o file.obj
    linker_di_visual_c++ file.obj eseguibile ecc ... #Non conosco i parametri
    #Windows COFF (DJGPP as example)
    nasm -f coff file.asm -o file.obj

  7. #7
    quello che volevo dire era che un programma che con masm si assembla con nasm non si assembla su linuxI comandi per assemblarle li conosco grazie cmq
    LE DONNE:
    COME E' POSSIBILE SPERARE DI CAPIRLE SE LORO STESSE NON RIESCONO A FARLO?

  8. #8
    Il NASM è completamente differente dal MASM, semplicemente perchè il MASM definisce delle macro, che il NASM non ha, e se vuoi te le puoi definire tu

    CIAo,
    MArco.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.