2013-11-26 54 views
0

我是新裝配,我在這裏嘗試簡單的代碼,爲什麼我的提示顯示3次?我需要做什麼,它只能顯示我提示一次?我錯過了某個地方的回報?我試過RET顯示器和DisplayN和顯示名稱,但它仍然顯示了我兩次...爲什麼我的提示顯示三次

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

你使用WriteString顯示的字符串。 WriteString使用edx來保存要打印的字符串的地址。

你叫DisplayPromptvHexPrompt地址遷入edx,然後調用DisplayString並且在功能,你叫WriteStringedx仍然包含地址vHexPrompt這就是爲什麼你會得到雙重提示。

直到你寫更多的代碼來利用DisplayString,要麼註釋掉調用該函數writestring,或者只是你在DisplayString

調用 WriteString前添加 xor edx, edx
相關問題