您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

汇编:从标准输入中读取整数,将其递增并打印到标准输出

汇编:从标准输入中读取整数,将其递增并打印到标准输出

movl %edi, %ecx    # store input in register %edi
movl $4, %edx       # read one byte

这部分都是错误的。您无法将读取结果存储在寄存器中。这实际上是在将结果存储在%edi中包含的地址中,由于您没有设置它,所以可能是您没有业务存储任何内容的地方。您首先需要在内存中腾出空间来存储字符串。您还将读取四个字节而不是一个字节。

我会用这样的东西代替

subl $4, %esp
movl %esp, %ecx
movl $4, %edx

这将为堆栈上的4个字节腾出空间,然后将堆栈的顶部用作存储字符串的地址。您还必须修改write syscall的参数才能使用此地址。

您还必须处理的另一个问题是stdin和stdout通常处理文本,因此您正在阅读的内容可能是字符串而不是数字,要将其用作数字,则必须将其转换为然后将其转换回原先的状态。

其他 2022/1/1 18:18:23 有513人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶