bug mini programma assembly

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
NicoMetal
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: dom 2 mag 2010, 18:21
Nome Cognome: Nicola
Slackware: current64
Kernel: 4.3
Desktop: kde5 - FluxBox
Località: Verona

bug mini programma assembly

Messaggio 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).

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: bug mini programma assembly

Messaggio 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).

Rispondi