如何找到用户输入的最小和最大数字
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)
所以我的任务是“编写一个程序,读取数字直到输入 -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)