Logo ITP-NEWS
RSS | Contatti | Login|Registrati| Home
giornali
Conversione di un numero da stringa ad intero e viceversa
Di Fusco Francesco::2016-02-13
Condividi questo articolo


;Conversione di un numero da stringa ad intero e viceversa
;Versione 1
;Assemblare con nasm -f elf converti_stampa_numero.asm
;Linkare con ld -m elf_i386 -s -o converti_stampa_numero converti_stampa_numero.o
;seguire con ./converti_stampa_numero

%define STDIN 0
%define STDOUT 1
%define SYS_READ 3
%define SYS_WRITE 4
%define NEWLINE 10
%define base 10
%define STRING_TERMINATOR 0

;Sezione text
;Inizio del programma
section .text
global _start ;deve esser dichiarato per il linker (ld)
_start: ; informa il linker sul punto di ingresso al programma
;--------------------------------------------------------------------------------------
;Input dei dati
;--------------------------------------------------------------------------------------
;Messaggio di prompt per la lettura del numero
mov eax,SYS_WRITE ;numero di chiamata di sistema (sys_write)
mov ebx,STDOUT ;descrittore di file (stdout)
mov ecx,prompt1 ;Messaggio Lettura numero
mov edx,lenprompt1 ;lunghezza del messaggio
int 0x80 ;chiamata di sistema (kernel)
;--------------------------------------------------------------------------------------
;Lettura del numero
;--------------------------------------------------------------------------------------
mov eax,SYS_READ ;numero di chiamata di sistema (sys_read)
mov ebx,STDIN ;descrittore di file (stdin)
mov ecx,anumero
mov edx,len_numero
int 0x80 ;chiamata di sistema (kernel)
;--------------------------------------------------------------------------------------
;Converti stringa in numero
;--------------------------------------------------------------------------------------
mov esi,anumero ; copia nel registro esi l'indirizzo della stringa contenente il numero
mov ecx,eax ; copia in ecx la lunghezza della stringa contenente il numero
dec ecx ;non conteggia il carattere di invio
xor ebx,ebx ; azzera il contenuto di ebx
ripeti:
movzx eax,byte[esi] ; MOVZX sposta un valore unsigned (senza segno) in un registro più grande e lo estende con zero.
sub al,'0' ; Converte il codice ascii del numero nella cifra corrispondente
imul ebx,10 ; ebx=ebx*10 --> Moltiplica ebx per 10
add ebx,eax ; Calcola il valore numerico ebx=ebx*10+eax
inc esi
loop ripeti
;--------------------------------------------------------------------------------------
;Converti numero in stringa
;--------------------------------------------------------------------------------------
mov eax,ebx ; EAX = valore intero da convertire
mov esi,inumero ; ESI = puntatore al buffer per memorizzare la stringa (deve avere spazio per almeno 10 byte)
add esi,9
mov byte [esi],STRING_TERMINATOR
mov ebx,10
.next_digit:
xor edx,edx ; Azzera edx prima di dividere edx:eax per ebx
div ebx ; eax /= 10
add dl,'0' ; Converte il resto in ASCII
dec esi ; memorizza i caratteri in ordine inverso
mov [esi],dl
test eax,eax
jnz .next_digit ; Ripeti finché eax==0
;--------------------------------------------------------------------------------------
; Output:
;--------------------------------------------------------------------------------------
mov ecx,esi ; ECX = puntatore al primo carattere della stringa generata
mov eax,SYS_WRITE ; numero di chiamata di sistema (sys_write)
mov ebx,STDOUT ; descrittore di file (stdout)
mov edx,10 ; lunghezza della stringa
int 0x80 ; chiamata di sistema (kernel)
;--------------------------------------------------------------------------------------
;termina il programma
;--------------------------------------------------------------------------------------
mov eax,1 ;numero chiamata di sistema (sys_exit)
mov ebx, 0 ;codice di ritorno
int 0x80 ;chiamata di sistema (kernel)

;Sezione data
section .data
prompt1 db 'Inserisci il numero:'
lenprompt1 equ $-prompt1

;Sezione bss (Block Started by Symbol)
section .bss
anumero resb 25 ;numero da leggere
inumero resb 25 ;numero convertito in stringa
len_numero equ 25
intnumero equ 0 ;numero trasformato in intero
numero equ 0
valore equ 0

Documenti allegati:
Conversione di un numero da stringa ad intero e viceversa.pdf

Invia questo articolo ad un amico

Nome Mittente
Email Mittente
Nome Destinatario
Email Destinatario
Messaggio

Free Web Hosting with Website Builder

Gli ultimi articoli


Array in Java
Gestione dei file in Php
Protocollo ARP
Come convertire caratteri in Ascii in Java
Conversione di un numero da stringa ad intero e viceversa
Tabella di struct - memorizzare i conti ed i nomi dei clienti
Un esempio di struct in C
In tutta Italia il "sabato del pinguino" festa di Linux e del software Libero
Inserimento di un elemento di un insieme S, che verifica una certa proprietà P, in un secondo insieme T
Compattare un array dinamico di numeri interi. dopo aver eliminato eventuali numeri perfetti
Webmaster
Home
Condizioni d'utilizzo
Privacy
Mappa del sito
Contattateci
(C) Teaching OnLine (Napoli) - 2009