【发布时间】:2016-11-17 21:55:18
【问题描述】:
我想写一个程序来返回你写的字符串。但它总是在没有第一个字符的情况下打印它。此外,它不会返回第一个空格之后的任何内容。
例子:
IN: test
OUT: est
代码:
extern printf, scanf, exit
global main
section .text
main:
push rbp
;input of string
mov rdi, format
mov rsi, string
mov rax, 0
call scanf
;output of string
mov rdi, format_out
mov rsi, qword [string]
mov rax, 0
call printf
_exit: ;end of program
pop rbp
call exit
section .data
format db "%s", 0
string db 0
format_out db "You wrote: %s", 0
我注意到如果我将string db 0 更改为string db",它会显示错误,但程序可以正常工作,将整个句子打印到第一个空格。不幸的是,我不知道该怎么做该信息。感谢您的回答。
【问题讨论】:
-
我猜
string是您存储用户输入的字符串的变量。您希望用户输入多少个字符?变量string的大小是多少? -
嗯,我不知道。假设 20 是最大字符数。我现在该怎么办?
-
那么你应该为字符串分配超过 1 个字节,足够你的 20 max
-
我不知道这种语法,但为什么
mov rsi, string和mov rsi, qword [string]看起来不同?调用应该相同。 -
Zumalo,你的字符串太小了,只有一个字节。你需要像
string times 21 db 0这样的东西。
标签: assembly printf nasm x86-64