嗨,我正在处理一个装配,技术上是 HLA(高级装配)任务,我是一个需要帮助的错误。这是作业:
编写一个 HLA 汇编语言程序,该程序实现一个函数,该函数正确识别所有参数是否不同,根据是否满足此条件,在 EAX 中返回 0 或 1。此函数应具有以下签名:
程序allDifferent(x:int16;y:int16;z:int16);@无显示;@无框;
下面显示的是一个示例程序对话。
喂我 X:205
喂我 Y:170
喂我 Z:91
allDifferent 返回真!
Feed Me X: 0
Feed Me Y: 0
Feed Me Z: 0
allDifferent 返回 false!
喂我 X:121
喂我 Y:121
喂我 Z:121
allDifferent 返回 false!
这是我的代码。我的问题是,无论我输入什么数字,它总是返回“allDifferent 返回 false!” 谢谢你的帮助。
program allDifferent;
#include( "stdlib.hhf" );
static
iDataValue1 : int16 := 0;
iDataValue2 : int16 := 0;
iDataValue3 : int16 := 0;
iDataValue4 : int16 := 0;
procedure allDiff( x: int16; y : int16; z : int16 ); @nodisplay; @noframe;
static
returnAddress : dword;
temp : int16;
begin allDiff;
pop(returnAddress);
pop(z);
pop(y);
pop(x);
pop(temp);
push(returnAddress);
push(AX);
push(BX);
mov(x, AX);
cmp(y, AX);
je xyequal;
jmp notequal;
xyequal:
mov(y, BX);
cmp(z, BX);
je equal;
jmp notequal;
equal:
mov(0, EAX);
jmp ExitSequence;
notequal:
mov(1, EAX);
jmp ExitSequence;
ExitSequence:
pop(BX);
pop(AX);
ret();
end allDiff;
begin allDifferent;
stdout.put( "Gimme a X:" );
stdin.get( iDataValue1 );
stdout.put("Gimme a Y:");
stdin.get(iDataValue2);
stdout.put("Gimme a Z:");
stdin.get(iDataValue3);
push( iDataValue1 );
push( iDataValue2 );
push( iDataValue3 );
push( iDataValue4 );
call allDiff;
cmp(EAX, 1);
je ISDIFFERENT;
jmp NOTDIFFERENT;
ISDIFFERENT:
stdout.put("allDifferent retursn true",nl);
jmp EndProgram;
NOTDIFFERENT:
stdout.put("allDifferent retursn false",nl);
jmp EndProgram;
stdout.newln();
EndProgram:
end allDifferent;