我尝试在装配中扫描100个大小的字符串并使用scanf和printf进行打印。
.data
strString: .string "%s"
stringToRev: .space 100
.text #the beginning of the code
.globl main #the label "main" is used to state the initial point of this program
.type main, @function # the label "main" representing the beginning of a function
main: # the main function:
pushl %ebp #save the old frame pointer
movl %esp, %ebp #create the new frame pointer
pushl %ebx #saving a callee save register.
leal -12(%ebp), %edx #choice will be saved in edx
pushl %edx
pushl $strString
call scanf
movl (%edx), $stringToRev
pushl -12(%ebp)
pushl $strString
call printf
call Reverse
pushl %eax
pushl $strString
call printf
如果我输入一个字符串,例如" asfdg",则输出0(而不是此字符串)。 我对此感到绝望 - 网上集会没有答案!
答案 0 :(得分:0)
你的问题是你没有为你的字符串分配内存,所以它是随机放置的。我建议你在数据部分为字符串保留一些空间,并将指向此空间的指针作为参数推送到scanf。
如果您使用的是本地堆栈变量,请在此处暗示:
pushl -12(%ebp)
然后你还必须为它保留一些堆栈空间,你可以在这里看到它:
pushl %ebp #save the old frame pointer
movl %esp, %ebp #create the new frame pointer
pushl %ebx #saving a callee save register.
leal -12(%ebp), %edx #choice will be saved in edx
您没有在堆栈上为本地指针保留任何空间。当然,您必须确定它是否应该是指针,然后您仍然需要为实际字符串提供一些空间,或者将整个字符串放在堆栈上并在那里保留足够的空间。