Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么我的提示符显示三次_Assembly_X86_Prompt_Masm_Irvine32 - Fatal编程技术网

Assembly 为什么我的提示符显示三次

Assembly 为什么我的提示符显示三次,assembly,x86,prompt,masm,irvine32,Assembly,X86,Prompt,Masm,Irvine32,我是汇编新手,我正在这里尝试简单的代码,为什么我的提示符会显示3次?我需要做什么才能让它只显示一次提示??我错过了某个地方的回程?我已经尝试了ret的显示器和DisplayN和DisplayName,但它仍然显示我两次 INCLUDE Irvine32.inc .data ;--------- Enter Data Here vS BYTE "************", 0 vA BYTE "************", 0 vName BY

我是汇编新手,我正在这里尝试简单的代码,为什么我的提示符会显示3次?我需要做什么才能让它只显示一次提示??我错过了某个地方的回程?我已经尝试了ret的显示器和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

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

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

在编写更多代码以利用
displaysting
之前,请注释掉该函数中对writestring的调用,或者在
displaysting
中调用
writestring
之前添加
xor edx,edx