获取用户详细信息,计算年龄并显示所有信息的程序
Program to get user's details, calculate age and display all information
我已经启动了一些代码,但是我在将用户字符串输入保存到变量中时遇到问题。
使用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
Irvine 的 ReadString
需要 EDX
和 ECX
中的两个参数。它以输入的大小填充 EDX
和 returns 指向的内存。由于 [EDX]
中的字符串将以零结尾,因此您必须为字符串和终止空值保留 space。对于 AskName1 DWORD ?
,您只保留了 4 个字节 - 这肯定不够。
按照我调试看到的,ECX应该是字符串的大小with null(不是说的:"max number of non-null chars" = 尺寸-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
我已经启动了一些代码,但是我在将用户字符串输入保存到变量中时遇到问题。
使用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
Irvine 的 ReadString
需要 EDX
和 ECX
中的两个参数。它以输入的大小填充 EDX
和 returns 指向的内存。由于 [EDX]
中的字符串将以零结尾,因此您必须为字符串和终止空值保留 space。对于 AskName1 DWORD ?
,您只保留了 4 个字节 - 这肯定不够。
按照我调试看到的,ECX应该是字符串的大小with null(不是说的:"max number of non-null chars" = 尺寸-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