汇编语言:两次提示用户输入(混合 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

Bibliography