我有這樣的代碼:打印輸出
INCLUDE Irvine32.inc
.data
arry BYTE ?
prompt1 BYTE "Enter first hex number: ",0
prompt2 BYTE "Enter second hex number: ",0
prompt3 BYTE "The sum is ",0
prompt4 BYTE "The sum is out of range ",0
prompt5 BYTE "Convert again? [y/n]: ",0
prompt6 BYTE "First number is invalid ",0
prompt7 BYTE "Second number is invalid ",0
.code
main PROC
ReadInput:
L1:
mov edx, OFFSET prompt1
call writeString
mov edx, 0
call readHex
call Crlf
mov ecx, eax
jmp L3
L2:
mov eax, 0
mov edx, OFFSET prompt2
call writeString
mov edx, 0
call readHex
call Crlf
mov ebx, eax
mov eax, 0
jmp L4
L3:
cmp ecx, 0FFFFh
JA L5
JBE L2
L4:
cmp ebx, 0FFFFh
JA L6
JBE addInt
L5:
mov edx, OFFSET prompt6
call writeString
mov edx, 0
call Crlf
jmp L1
L6:
mov edx, OFFSET prompt7
call writeString
mov edx, 0
call Crlf
jmp L2
addInt:
clc
mov ax, cx
add ax, bx
JC printError
jmp convert
; convert hex to string
convert:
mov ecx, 0
mov esi, 0
mov si, 4
mov cx, 10h
convertDigit:
dec si
mov dx , 0
div cx
cmp dx, 9h
JA convertLetter
add dx, 30h
jmp printSucess
convertLetter:
add dx, 37h
jmp printSucess
printError:
mov edx, OFFSET prompt4
call writeString
call Crlf
printSucess:
mov arry[si], dl
cmp ax , 0
JNE convertDigit
mov edx, OFFSET arry
add dx, si
call writeString
call Crlf
exit
main ENDP
END main
,當我試圖打印輸出我得到這個
輸入第一個十六進制數:FF
進入第二個十六進制數:FF
1FEer第一個十六進制數: 按任意鍵繼續。 。 。
你可以看到,有PROMPT1的一部分,er first hex number
它套牢的總和1FE
的價值,爲什麼會出現這種情況
程序循環EDX寄存器3次第一時間的價值是E
時,第二次是F
,第三次是1
,那麼它得到writeString打印輸出,這似乎是程序假設要做的事情,此時edx值突然跳到00405911
,爲什麼會發生這種情況?
在此先感謝幫助
EDX的地址時,複製PROMPT1 toedx是他一樣複製總和EDX當EDX的地址,導致合計追加和替換零件的提示1,我如何使edx更改爲不同的地址,所以它只會輸出總和,而不會將prompt1的部分添加到它? – bluebk
代碼丟失。 – Devolus
不,我沒有複製和粘貼所有東西 – bluebk