我正在尝试使用递归过程来计算高级汇编中的 AB。计算出差异后,将其存储在 EAX 寄存器中,以便在程序结束时显示。
我的问题:在退出程序之前,寄存器 EAX 和 EBX 中的值是正确的,但我不明白为什么 A 大于 B 时 EAX 总是为零。
导致这种情况的 ret() 命令有什么问题吗?我的代码有什么问题?有人请帮助我。
这是示例代码:
program MainSubtractionFunction;
#include( "stdlib.hhf" );
static
iDataValue1 : int32 := 0;
iDataValue2 : int32 := 0;
DifferenceInt : int32 :=69;
procedure recursiveSubtraction( a: int32; b : int32 ); @nodisplay; @noframe;
static
returnAddress : dword;
value: int32;
begin recursiveSubtraction;
pop( returnAddress );
pop( b );
pop( a );
push( returnAddress );
mov (a, EAX);
mov (b, EBX);
CompareB:
cmp (EBX, 0);
je ExitSequence;
CompareA:
cmp (EAX, 0);
je AEqualsZero;
NeitherEqualZero:
sub (1, EAX);
sub (1, EBX);
push(EAX);
push(EBX);
call recursiveSubtraction;
AEqualsZero:
neg (EBX);
mov (EBX, EAX);
jmp ExitSequence;
BEqualsZero:
jmp ExitSequence;
ExitSequence:
ret();
end recursiveSubtraction;
begin MainSubtractionFunction;
stdout.put( "Feed Me A: " );
stdin.get( iDataValue1 );
stdout.put( "Feed Me B: " );
stdin.get( iDataValue2 );
push( iDataValue1 );
push( iDataValue2 );
call recursiveSubtraction;
mov(EAX, DifferenceInt);
stdout.put("RecursiveSubtraction of A-B = ",DifferenceInt, nl);
stdout.put("EAX = ",EAX, nl);
stdout.put("EBX = ",EBX, nl);
stdout.put("ECX = ",ECX, nl);
end MainSubtractionFunction;