首先,我只想说我对编码和学习非常新。我必须写一个程序,让你输入数字的HLA代码。在输入每个数字之后,它给你一个新的行来输入另一个数字,直到输入“0”。然后程序应该停止并以正确的顺序显示u输入的所有数字。我需要使用堆内存来存储数字。所以当它们出来的时候顺序是错的。这就是我现在的处境
program Project3;
#include("stdlib.hhf")
static
count: int32 := 0;
mempointer: int32;
begin Project3;
mem.alloc(1000);
mov(eax, mempointer);
loopStart:
stdout.put("Enter a number, 0 to stop: ");
stdin.flushInput();
stdin.geti32();
mov(eax, ebx);
cmp(ebx, 0);
je exitLoop;
add(1, count);
mov(count, ecx);
shl(2, ecx);
mov(mempointer, eax); add(ecx, eax);
mov([eax], ebx);
jmp loopStart;
exitLoop:
stdout.put(nl, "Entered numbers: ");
while (count <> 0) do
sub(1, count);
mov(count, ecx);
shl(2, ecx);
mov(mempointer, eax); add(ecx, eax);
mov(ebx, [eax]);
stdout.puti32(ebx);
stdout.put(" ");
endwhile;
mem.free(mempointer);
end Project3;
因为它是编译和运行,但它只显示一个0为每个数字,我已经进入。有人知道怎么修吗?
我试着用Manny不同的方法来存储数字,这样它们就会按照我输入的顺序出来。但是找不到我做错了什么。
1条答案
按热度按时间uidvcgyl1#
用一台“纸电脑”来检查你的算法。为每个重要的内存变量和寄存器绘制一个空框,逐行遍历代码,并使用新值更新受影响的框。
当你遇到
stdin.geti32();
时,请你的同学随机抽取两个或三个数字,例如7,3,5,0。在0之后,您将跳转到exitLoop:
,并且您应该以如下方式结束现在应该很明显出了什么问题。您过早地递增
counter
。同样,为了以正确的顺序显示数组,您可能需要另一个内存变量,如countOut: int32 := 0;
,您将在数字显示后递增,并检查counterOut
是否等于counter
。