Pagina 1 di 1

bug mini programma assembly

Inviato: sab apr 07, 2012 19:54
da NicoMetal
Qualcuno mi sa dire cosa c'è di errato in questo codice? Non riesco proprio a venirci a capo. È un esercizio in assembly sintassi AT&T. Ciò che non va è che l'output al posto di essere "Il contenuto di somma è: 201" è identico ma con al posto di 201 il simbolo di carattere sconosciuto.

Codice: Seleziona tutto


# Somma i valori 100, 33, 68 e inserisce il loro contenuto
# in eax. Dopodichè copia il contenuto di eax neòlla variabile somma
# e la stampa a video.

.section .data

  messaggio:
         .string  "Il contenuto di somma è: "

  leng_mes:
        .long  . - messaggio

  somma:
        .long 0

  leng_sum:
        .long . - somma

.section .text
  .global _start

  _start:
        movl $100, %eax
        addl $33, %eax
        addl $68, %eax
        movl %eax, somma

# Stampa a video "messaggio"
        movl $4, %eax
        movl $1, %ebx
        leal messaggio, %ecx
        movl leng_mes, %edx
        int $0x80

# Stampa a video il contenuto di somma
        movl $4,%eax
        movl $1, %ebx
        leal somma, %ecx
        movl leng_sum, %edx
        int $0x80

# Uscita programma
        movl $1, %eax
        xorl %ebx, %ebx
        int $0x80


ps. Il problema ho capito qual'è: in pratica mi stampa a video sì il contenuto di somma ma utilizzando la codifica ascii (l'ho capito perchè ho provato ad assegnare solo cento ad eax e poi trasferirne il contenuto in somma. Facendo così l'output è: il contenuto di somma è: d).

Re: bug mini programma assembly

Inviato: mar apr 10, 2012 10:25
da 414N
Beh, ti serve una procedura che ti trasformi un numero binario in un insieme di cifre ASCII, allora ;)
Con una serie di divisioni successive devi estrarre le singole cifre che compongono il tuo numero (unità, decine, centinaia ecc.) e aggiungere ad esse lo 0 ASCII ('0' oppure 30H).