我已经启动了一些代码但是在将用户字符串输入保存到变量时遇到了问题。
使用ReadString我可以提示用户输入一个字符串,但是在将用户输入保存到名为AskName1的变量中,然后显示保存在AskName1中的信息后,我发现它保存了用户的字符数输入而不是实际的字符串。所以我需要弄清楚的是如何将用户输入的字符串保存到变量而不是用户输入的字符数。
INCLUDE Irvine32.inc
.data
AskName BYTE "Please enter your name " ,0dh,0ah,0
Birth BYTE "Please enter your birth year",0dh,0ah,0
Job BYTE "Pleas enter the location at which you work",0dh,0ah,0
AskName1 DWORD ?
Birth1 DWORD ?
Job1 DWORD ?
.code
main PROC
call Clrscr
mov edx, OFFSET Birth
call writestring
call ReadInt
mov Birth1, eax
mov edx, OFFSET Birth1
call writeint
call crlf
mov edx, OFFSET AskName
call WriteString
call ReadString
; AT THIS POINT I WANT TO TAKE USER STRING INPUT AND SAVE THE STRING INTO THE VARIABLE "ASKNAME1"
main ENDP
END main
答案 0 :(得分:1)
欧文的ReadString
需要EDX
和ECX
中的两个参数。它填充EDX
指向的内存并返回输入的大小。由于[EDX]
中的字符串将以零结尾,因此您必须为字符串保留空间并终止空值。使用AskName1 DWORD ?
,您只保留了4个字节 - 这肯定是不够的。
在我看到调试时,ECX应该是字符串的大小 null(不是提到的:“非空字符的最大数量” = size-1 )。
这样做:
INCLUDE Irvine32.inc
.data
...
AskName1 BYTE 16 DUP (0) ; Reserve 16 bytes and fill them with 0
...
.code
...
lea edx, AskName1 ; EDX = address of AskName1
mov ecx, Sizeof AskName1 ; ECX = size of AskName1
call ReadString
...
; and don't forget:
push 0
call ExitProcess