Так что в основном я пытаюсь прочитать строку, увеличиваю счетчик (в данном случае% edx), пока не прочитаю a \ n, а затем, возвращаясь назад, чтобы напечатать его в обратном порядке ,Реверсирование строки и ее печать в сборке IA32
Это мой код:
.section .data
cadsal:
.asciz "Por favor ingrese su cadena:\n"
leer:
.asciz "%s"
salidafinal:
.asciz "La cadena introducida, invertida es:\n"
imp:
.asciz "%c\n"
.section .bss .comm Cadena, 50,1
.section .text
.globl _start
_start:
leal cadsal, %eax
pushl %eax
call printf
addl $4, %esp
leal cadena, %eax
pushl %eax
leal leer, %eax
pushl %eax
call scanf
addl $8, %esp
xorl %edx, %edx
Contar:
movb cadena(%edx), %al
incl %edx
cmpb $0, %al
jne Contar
leal salidafinal, %ecx
pushl %ecx
call printf
addl $4, %esp
addl $-2, %edx
Invertir:
movb cadena(%edx), %al
pushl %eax
leal imp, %ebx
pushl %ebx
call printf
addl $8, %esp
decl %edx
cmpl $0, %edx
jge Invertir
movl $1, %eax
int $0x80
Я использую команду -nostartfiles при компиляции. Он работает, но когда я его запускаю, при входе в «Инвертировать» появляется ошибка сегментации. Мне нужна помощь, чтобы определить, что не так в этом коде.
Спасибо!
Эй! Спасибо за ответ. Извините, я все еще любитель на собрании. Что вы подразумеваете под этим: вы должны нажать/погладить оба из них, чтобы сохранить значение. Что мне делать? –
'push% edx' перед' printf' (включая настройку аргумента) и 'pop% edx' после' add esp'. – Jester
Сменил первый cmp и, в частности, «Contar» теперь работает нормально. Теперь я получаю ошибку сегментации в «Инвертире». Измененный addl $ -2,% edx, потому что contar заканчивается с% edx на один шаг вперед от $ 0 (конец строки). –