0

我是汇编新手,我在这里尝试简单的代码,为什么我的提示显示 3 次?我需要做什么才能让我提示一次??我错过了某个地方的回报?我已经为 DisplayS 和 DisplayN 和 DisplayName 尝试了 ret,但它仍然显示了我两次......

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
4

1 回答 1

1

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

您调用DisplayPrompt并将地址vHexPrompt移入edx,然后调用DisplayString并在该函数中调用WriteStringedx仍然包含地址,vHexPrompt这就是您收到双重提示的原因。

在您编写更多代码来使用之前DisplayString,请在该函数中注释掉对 writestring 的调用,或者在调用inxor edx, edx之前添加WriteStringDisplayString

于 2013-11-26T03:10:14.287 回答