程序 6:相同 编写一个 HLA 汇编语言程序,该程序实现一个函数,该函数正确识别所有四个参数何时相同并在 AL 中返回一个布尔值(当所有四个值相等时为 1;否则为 0)。此函数应具有以下签名:
程序 theSame(w:int16;x:int16;y:int16;z:int16); @无显示;@无框;
下面显示的是一个示例程序对话。
喂我 W:215 喂我 X:215 喂我 Y:480 喂我 Z:91 不一样。铝= 0
喂我 W:0 喂我 X:0 喂我 Y:0 喂我 Z:0 相同。铝= 1
喂我 W:0 喂我 X:221 喂我 Y:100 喂我 Z:40 不一样。铝= 0
**我的输出几乎是正确的,但是当我输入时
w : 2
x : 2
y : 2
z : 1
"the same" instead of "NOT the same"
请帮助我可能遗漏的任何想法。** 我不确定注册推送和弹出是否是问题。
program Same;
#include ("stdlib.hhf");
static
iDataValue1 : int16 := 0;
iDataValue2 : int16 := 0;
iDataValue3 : int16 := 0;
iDataValue4 : int16 := 0;
procedure theSame( w : int16; x : int16; y : int16; z : int16); @nodisplay; @noframe;
static
returnAddress : dword;
temp: int16;
begin theSame;
pop (returnAddress);
pop (temp);
pop (z);
pop (y);
pop (x);
pop (w);
push (returnAddress);
push (BX);
//Perform Subtask
mov (z, BX);
cmp (y, BX); // Compare z & y
jne ReturnZero;
mov (y, BX);
cmp (x, BX); // Compare y & x
je ReturnOne;
jmp ReturnZero;
mov (x, BX);
cmp (w, BX); // Compare x & w
je ReturnOne;
jmp ReturnZero;
ReturnOne:
mov (1, AL);
jmp ExitSequence;
ReturnZero:
mov (0, AL);
jmp ExitSequence;
ExitSequence:
pop (BX);
ret();
end theSame;
begin Same;
stdout.put ("Feed Me W: ");
stdin.get (iDataValue1);
stdout.put ("Feed Me X: ");
stdin.get (iDataValue2);
stdout.put ("Feed Me Y: ");
stdin.get (iDataValue3);
stdout.put ("Feed Me Z: ");
stdin.get (iDataValue4);
push (iDataValue1);
push (iDataValue2);
push (iDataValue3);
push (iDataValue4);
call theSame;
cmp (AL, 1);
je NumbersAreSame;
jmp NumbersAreDifferent;
NumbersAreSame:
stdout.put ("Same. AL = 1");
jmp EndProgram;
NumbersAreDifferent:
stdout.put ("Not the same. AL = 0");
stdout.newln();
jmp EndProgram;
EndProgram:
end Same;