如何找到用户输入的最小和最大数字

How to find smallest and largest numbers input by user

所以我的任务是“编写一个程序,读取数字直到输入 -999,然后显示已输入的最大和最小数字”

我自己构建了大约 75%,我在代码的最后总是遇到一个错误它一直显示 0 作为我最大的输入。我认为这与我的柜台设置方式有关。我认为它试图从我推送任何内容之前存在的内存中提取内存。

这个作业的第二部分我完全不知道如何处理。如果我有第二个堆栈可以访问,我可以毫无问题地解决它,但我并没有尝试弄清楚如何像堆栈一样使用数组。我真的不记得细节了,但我知道可以做到。

INCLUDE Irvine32.inc

.data
input byte 50 DUP(0)
counter Dword 50 dup (0)
counter2 byte 50 dup (0)
array Word 50 dup(0)

sentinal dword (0)

statement  byte "PLease enter a number"  ,0
statement2 byte "To exit enter the number '-999'" ,0
statement3 byte "your biggest number was " ,0


.code
main proc

mov ecx ,1
L1: 
mov ecx ,2
mov edx , OFFSET statement          ; puts statement into register
call WriteString                    
call CRLF
mov edx , offset statement2
Call writestring
Call CRLF

call Readdec
.if (EAX==sentinal )                ;tests agaisnt breakout
sub ecx , 1
.endif
push EAX
inc counter
loop L1

mov ecx ,0
mov ecx , counter

pop EDX                             ;pulls initial inputs
Pop EBX
L2:

.if (EDX > EBX)                     ;test for largest input
pop EbX 
.Elseif (EDX<EBX)
pop EDX
.Endif
loop L2

mov EDX ,offset statement3
call writestring                    ;displays largest input(BUG)
.if (EDX>EBX)
mov edx , eax
CAll writeDec
.elseif (EBX>EDX)
mov eBx , EAX
CAll Writedec
call crlf
.endif
Exit
main endp
end main

I keep getting a bug at the very end of my code It keeps displaying 0 as my biggest input.

当您准备好打印结果时,您已经通过为随附文本分配地址来销毁 EDX 的内容。
将 EDX 保存在堆栈上:

push edx
mov  EDX ,offset statement3
call writestring                    ;displays largest input(BUG)
pop  edx
.if  (EDX>EBX)
mov  edx , eax
CAll writeDec

你不应该用正确的值定义 sentinal 吗?

sentinal dword (-999)

你能看出在下一个片段中第一行是多余的吗?您立即用另一个值覆盖 ECX 寄存器。

mov ecx ,1
L1: 
mov ecx ,2

为什么要定义那么多计数器?也许去掉 50 dup

counter Dword 50 dup (0)