【问题标题】:How to find smallest and largest numbers input by user如何查找用户输入的最小和最大数字
【发布时间】:2016-03-08 17:11:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: assembly x86 masm 32-bit irvine32


    【解决方案1】:

    我在代码的最后总是遇到一个错误它一直显示 0 作为我最大的输入。

    当您准备好打印结果时,您已经通过为 EDX 分配随附文本的地址而破坏了 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)
    

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

    mov ecx ,1
    L1: 
    mov ecx ,2
    

    为什么要定义这么多计数器?也许剥离50 dup

    counter Dword 50 dup (0)
    

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 2016-06-13
      • 2016-07-24
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2016-06-21
      相关资源
      最近更新 更多