为什么我的提示显示三次

时间:2013-11-26 02:39:00

标签: assembly x86 prompt masm irvine32

我是装配新手,我在这里尝试简单的代码,为什么我的提示会显示3次?我需要做什么才能告诉我一次提示?我错过了某个地方的回归?我已经尝试了RetS和DisplayN以及DisplayName,但它仍然显示了我两次......

INCLUDE Irvine32.inc
.data
;--------- Enter Data Here


        vS BYTE "************", 0
        vA BYTE "************", 0
        vName BYTE "*************", 0
        vHexPrompt BYTE "Please Enter the Value:" ,0
.code
main PROC
;--------- Enter Code Below Here

call Clrscr 
call DisplayS 
call DisplayA
call DisplayName 
call DisplayPrompt

call DisplayString
call EndProgram  
call Clrscr

;------------------------------------------------------------------

        DisplayS:
                mov dh, 4
                mov dl, 33
                call Gotoxy

                mov edx, OFFSET vS
                call WriteString

 ret
;------------------------------------------------------------------

        DisplayA:
                mov dh, 5
                mov dl, 33
                call Gotoxy

                mov edx, OFFSET vA
                call WriteString
 ret
;------------------------------------------------------------------

        DisplayName:
                mov dh, 6
                mov dl, 33
                call Gotoxy

                mov edx, OFFSET vName
                call WriteString
 ret
;------------------------------------------------------------------
        DisplayPrompt:
                mov dh, 8
                mov dl, 33
                call Gotoxy
                mov edx, OFFSET vHexPrompt
                call WriteString
ret
;------------------------------------------------------
DisplayString:
call WriteString
ret

;----------------------------------------------------------
EndProgram:
    xor ecx, ecx
    call ReadChar

    exit
main ENDP

END main

1 个答案:

答案 0 :(得分:1)

您使用WriteString显示字符串。 WriteString使用edx来保存要打印的字符串的地址。

您致电DisplayPrompt并将vHexPrompt的地址移至edx,然后致电DisplayString,并在该功能中拨打WriteStringedx仍然包含vHexPrompt的地址,这就是您获得双重提示的原因。

在您编写更多代码以使用DisplayString之前,请先注释掉该函数中对writestring的调用,或者在调用xor edx, edx WriteString之前添加DisplayString }