我是装配新手,我在这里尝试简单的代码,为什么我的提示会显示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
答案 0 :(得分:1)
您使用WriteString
显示字符串。 WriteString
使用edx
来保存要打印的字符串的地址。
您致电DisplayPrompt
并将vHexPrompt
的地址移至edx
,然后致电DisplayString
,并在该功能中拨打WriteString
。 edx
仍然包含vHexPrompt
的地址,这就是您获得双重提示的原因。
在您编写更多代码以使用DisplayString
之前,请先注释掉该函数中对writestring的调用,或者在调用xor edx, edx
WriteString
之前添加DisplayString
}