こんにちは、私はアセンブリ、技術的には HLA (High Level Assembly) の割り当てに取り組んでおり、助けが必要なバグです。課題は次のとおりです。
すべてのパラメーターが異なるかどうかを正しく識別し、この条件が満たされているかどうかに応じて EAX で 0 または 1 を返す関数を実装する HLA アセンブリ言語プログラムを作成します。この関数には、次の署名が必要です。
手続き allDifferent( x: int16; y : int16; z : int16 ); @nodisplay; @noframe;
以下に示すのは、サンプル プログラム ダイアログです。
Feed Me X: 205
Feed Me Y: 170
Feed Me Z: 91
allDifferent は true を返します。
Feed Me X: 0
Feed Me Y: 0
Feed Me Z: 0
allDifferent は false を返します。
Feed Me X: 121
Feed Me Y: 121
Feed Me Z: 121
allDifferent は false を返します。
これが私が持っているコードです。私の問題は、入力した数字に関係なく、常に「allDifferent returns 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;