汇编语言:两次提示用户输入(混合 char 和 int)
Assembly Language: Two-prompt user input (mix char and int)
我是汇编编程的新手,需要帮助来理解和修复我一直在努力解决的一些代码:
我想提供用户输入:
提示1:输入目的地
读取值
提示 2:输入目的地
读取值
显示距离和目的地。
我在 x64 硬件上使用 VS2012 和 Irvine32 库。我正在编译为 x32。
问题
代码编译和构建。但是输出不正确。第一个提示只显示没有输入。第二个提示 "Distance" 显示允许输入。如果我将第一个提示更改为 "readInt" 而不是 "readString",我会同时收到提示,但我会收到 "Invalid Integer" 错误。为什么是这样?我该如何解决这个问题并显示输入值。
我的代码
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination", 0
queryDist byte "Distance", 0
destination dword ?
distance dword ?
.code
main proc
call clrscr
mov edx, offset queryDest
call writeString
call readString
mov destination, eax
call crlf
mov edx, offset queryDist
call writeString
call readInt
mov distance, eax
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main
当前输出
目的地
距离50
按任意键继续...
未经测试,因为我的 VS 2012 拒绝工作(正在处理)。您的主要问题是 destination
必须是字符串,而不是数字:
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination=", 0
queryDist byte "Distance=", 0
destination byte " " ; LENGTH 21.
distance dword ?
.code
main proc
call clrscr
;READ DESTINATION.
mov edx, offset queryDest
call writeString ;DISPLAY MESSAGE.
mov edx, offset destination ;STORE STRING HERE (ZERO TERMINATED).
mov ecx, 20 ;MAX CHARS TO READ.
call readString ;STORES STRING WHERE EDX POINTS.
call crlf
;READ DISTANCE.
mov edx, offset queryDist
call writeString ;DISPLAY MESSAGE.
call readInt
mov distance, eax
;DISPLAY DESTINATION AND DISTANCE.
call crlf
call crlf
mov edx, offset destination ;EDX POINTS TO STRING TO DISPLAY.
call writeString ;DISPLAY DESTINATION.
call crlf
mov eax, distance ;NUMBER TO DISPLAY.
call writeInt ;DISPLAY DISTANCE.
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main
我是汇编编程的新手,需要帮助来理解和修复我一直在努力解决的一些代码: 我想提供用户输入:
提示1:输入目的地 读取值 提示 2:输入目的地 读取值 显示距离和目的地。
我在 x64 硬件上使用 VS2012 和 Irvine32 库。我正在编译为 x32。
问题 代码编译和构建。但是输出不正确。第一个提示只显示没有输入。第二个提示 "Distance" 显示允许输入。如果我将第一个提示更改为 "readInt" 而不是 "readString",我会同时收到提示,但我会收到 "Invalid Integer" 错误。为什么是这样?我该如何解决这个问题并显示输入值。
我的代码
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination", 0
queryDist byte "Distance", 0
destination dword ?
distance dword ?
.code
main proc
call clrscr
mov edx, offset queryDest
call writeString
call readString
mov destination, eax
call crlf
mov edx, offset queryDist
call writeString
call readInt
mov distance, eax
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main
当前输出
目的地
距离50
按任意键继续...
未经测试,因为我的 VS 2012 拒绝工作(正在处理)。您的主要问题是 destination
必须是字符串,而不是数字:
INCLUDE irvine32.inc
;*************************************************************************
.data
queryDest byte "Destination=", 0
queryDist byte "Distance=", 0
destination byte " " ; LENGTH 21.
distance dword ?
.code
main proc
call clrscr
;READ DESTINATION.
mov edx, offset queryDest
call writeString ;DISPLAY MESSAGE.
mov edx, offset destination ;STORE STRING HERE (ZERO TERMINATED).
mov ecx, 20 ;MAX CHARS TO READ.
call readString ;STORES STRING WHERE EDX POINTS.
call crlf
;READ DISTANCE.
mov edx, offset queryDist
call writeString ;DISPLAY MESSAGE.
call readInt
mov distance, eax
;DISPLAY DESTINATION AND DISTANCE.
call crlf
call crlf
mov edx, offset destination ;EDX POINTS TO STRING TO DISPLAY.
call writeString ;DISPLAY DESTINATION.
call crlf
mov eax, distance ;NUMBER TO DISPLAY.
call writeInt ;DISPLAY DISTANCE.
call crlf
Call WaitMsg ;causes a wait for a key to be pressed
exit
main endp
end main