Вы не зарезервировали достаточно места в памяти для хранения созданной нулем министроки, которую вы создаете ... поэтому, когда вы пишете в эту память, вы перезаписываете значение formatd и форматов (и поэтому вы ' в конечном итоге передать что-то отличное от "% s" в printf).
Вместо определения местоположения памяти ministring попробуйте использовать следующее:
ministring: .asciz " "
Также вместо этого:
movl %eax, ministring(%ecx,1)
Я не понимаю, почему вы не используете это вместо:
movb %al, ministring(%ecx,1)
Кроме того, если вы хотите напечатать мини-строку, то вместо этого:
movl thestring, %eax
Сделайте это:
movl ministring, %eax
Также вместо этого:
addl $4, %esp
Почему бы не это:
addl $8, %esp
Также я предлагаю вам использовать отладчик для:
- Шаг через код
- Наблюдайте за значениями, содержащимися в регистрах и в памяти, когда вы шагаете по
- Знать место любой ошибки сегментации