汇编语言:双提示用户输入(mix char和int)

时间:2016-06-10 21:13:31

标签: assembly masm irvine32

我是汇编编程的新手,需要帮助理解和修复我一直在努力解决的一些代码: 我想提供用户输入:

提示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

按任意键继续......

1 个答案:

答案 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

Bibliography