我想创建一个由原始(thestring)中的3个asciz字符组成的子串(ministring)。这个东西在运行时不打印所以我不知道我到底在做什么。为什么不打印?我正确地创建了迷你弦吗?
.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
答案 0 :(得分:1)
你没有预留足够的内存空间来包含你正在创建的以null结尾的ministring ...因此,当你写入这个内存时,你将覆盖formatd和format的值(所以你''最终将“%s”以外的内容传递给printf)。
请尝试使用以下内容,而不是您对ministring内存位置的定义:
ministring: .asciz " "
此外,而不是:
movl %eax, ministring(%ecx,1)
我不明白为什么你不使用它:
movb %al, ministring(%ecx,1)
另外,如果你想打印ministring,那么而不是:
movl thestring, %eax
这样做:
movl ministring, %eax
而不是这个:
addl $4, %esp
为什么不这样:
addl $8, %esp
另外我建议您使用调试器: