我是汇编编程的新手,需要帮助理解和修复我一直在努力解决的一些代码: 我想提供用户输入:
提示1:输入目的地 读取价值 提示2:输入目的地 读取价值 显示距离和目的地。
我在x64硬件上使用VS2012和Irvine32库。我正在编译为x32。
问题 代码编译和构建。但输出不合适。第一个提示仅在没有输入的情况下显示。显示第二个提示“距离”,允许输入。如果我将第一个提示改为“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
当前输出
目标的
Distance50
按任意键继续......
答案 0 :(得分:0)
未经测试,因为我的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