所以基本上我试图读取字符串,增加一个计数器(在这种情况下,%edx),直到我读取一个\ 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卡德纳,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。它可以工作,但是当我运行它时,在输入“Invertir”时会出现分段错误。我需要帮助来检测此代码中的错误。
谢谢!
嘿!谢谢回答。对不起,我仍然是一个业余爱好者。你到底意味着什么:你应该推动/弹出这两者以保持价值。我应该推什么? –
''printf'事务(包括参数设置)''add%edx''和'add esp'后'pop%edx'。 – Jester
交换第一个cmp和incl,“Contar”现在似乎工作正常。我现在在“Invertir”中出现分段错误。 修改后的addl $ -2,%edx因为contar完成,%edx从$ 0(字符串结尾)向前一步。 –