2008-12-31 18 views
1

Je veux créer une sous-chaîne (ministring) de 3 asciz chars hors de mon original (thestring). La chose ne s'imprime pas en cours d'exécution donc je ne sais pas ce que je fais. Pourquoi ce n'est pas l'impression? Est-ce que je crée le ministring correctement?créer une sous-chaîne sur Linux IA-32 assembleur (gaz)

.section .data 

thestring: .asciz "111010101" 

ministring: .asciz "" 

formatd: .asciz "%d" 
formats: .asciz "%s" 
formatc: .asciz "%c" 




.section .text 

.globl _start 

_start: 

xorl %ecx, %ecx 

ciclo:movb thestring(%ecx,1), %al 
movzbl %al, %eax 
movl %eax, ministring(%ecx,1) 
incl %ecx 
cmpl $3, %ecx 
jl ciclo 


movl thestring, %eax 
pushl %eax 
pushl $formats 
call printf 
addl $4, %esp 


movl $1, %eax 
movl $0, %ebx 
int $0x80 

Répondre

1

Vous avez pas assez d'espace mémoire réservé pour contenir la MiniString terminée par null que vous créez ... donc, lorsque vous écrivez à cette mémoire, vous écrasez la valeur de formatd et formats (et donc vous passez éventuellement autre chose que "% s" à printf).

Au lieu de votre définition de l'emplacement de mémoire Ministring, essayez d'utiliser les éléments suivants:

ministring: .asciz " " 

En outre, au lieu de ceci:

movl %eax, ministring(%ecx,1) 

Je ne comprends pas pourquoi vous aren ne pas utiliser à la place:

movb %al, ministring(%ecx,1) 

Aussi, si vous souhaitez imprimer le MiniString, puis au lieu de ceci:

movl thestring, %eax 

Pour ce faire:

movl ministring, %eax 

également au lieu de ceci:

addl $4, %esp 

Pourquoi pas ceci:

addl $8, %esp 

Alsó Je vous suggère d'utiliser un débogueur:

  • étape dans le code
  • montre les valeurs contenues dans les registres et dans la mémoire que vous franchissez
  • Connaître la emplacement de tout défaut de segmentation
+0

Segmentation fault – andandandand

+0

J'ai édité mon post, pour ajouter une suggestion pour utiliser movb au lieu de movl. Aussi, peut-être que vous devriez utiliser utiliser débogueur pour parcourir ce code, et d'examiner la mémoire et enregistrer le contenu. – ChrisW

+0

A fait les deux changements. Encore une erreur de segmentation – andandandand

Questions connexes