Include Irvine32.inc
.data
prompt1 BYTE "Bye!", 0
prompt2 BYTE "Type an integer : ", 0
.code
MAIN PROC
mov edx, OFFSET prompt2
call WriteString
call ReadInt
exit
MAIN ENDP
end main
我想按Enter键时结束程序, 当我写整数值(-2 ^ 15~2 ^ 15-1)时打印值。
我有一个问题,我不知道当我写0值并按回车键时如何让编译器区分。当我写0并按回车键时,所有标志和寄存器值都相同。所以我无法在代码上区分它。
当我调用WriteChar并检查第一个字符是否输入时,我可以解决这个问题,但这是非常复杂的代码。当我在调用WriteChar的情况下写入值时,我不得不将值从字符串更改为整数。
有没有简单的方法可以解决这个问题?
答案 0 :(得分:0)
没办法!你必须重写Irvine的ReadInt
程序。
原始函数使用ReadString
并将结果存储在ECX
中。但是,由于USES ecx edx
,ECX
的前值将在过程结束时恢复。只需将其更改为USES edx
即可解决问题。 ECX
现在包含输入字符串的大小。
Include Irvine32.inc
.data
prompt1 BYTE "Bye!", 0
prompt2 BYTE "Type an integer : ", 0
promptBad BYTE "Invalid input",0
.code
MAIN PROC
mov edx, OFFSET prompt2
call WriteString
read:
call myReadInt
jo error
jecxz error
call WriteInt
exit
error:
mov edx,OFFSET promptBad
call WriteString
exit
MAIN ENDP
myReadInt PROC USES edx
LOCAL digitBuffer[50]:BYTE
lea edx, digitBuffer
mov ecx,50
call ReadString
mov ecx,eax ; save length in ECX
call ParseInteger32 ; returns EAX, CF
ret
myReadInt ENDP
end main