نقل قول نوشته شده توسط SyntaxCheck
نقل قول نوشته شده توسط Anonymous
سلام دوستان
برای اجرای این کد یک Button و دو Editbox روی فرمتون قرار بدید. داخل ادیت باکسها اعدادی رو که قصد مقایسه داریر رو بنویسید.تابع ماکزیمم دو عدد رو برمیگردونه بدون کنترل شرطی.اگر خطی رو که جلوش // هست رو هم به برنامه برگردونید، مقدار مینیمم دو عدد برگشت داده میشه.


procedure TForm1.Button1Click(Sender: TObject);
var
buf: array[0..1]of integer;
i,a,b: Word;
begin
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
buf[0] := StrToInt(Edit1.Text);
buf[1] := StrToInt(Edit2.Text);
asm
push ax
push bx
push cx
push dx
xor a,$8000
xor b,$8000
mov ax,a
xor ax,b
mov dx,0
mov cx,16
clc
@aa:
mov bx,0
shl ax,1
jc @carry_sets
inc dl
loop @aa
@carry_sets:
inc dl
mov cl,16
sub cl,dl
mov ax,a
xor ax,b
mov bx,a
shr bx,cl
shr ax,cl
and ax,1
and bx,1
xor bx,ax
// xor bx,1
mov i,bx
pop dx
pop cx
pop bx
pop ax
end;
Caption := IntToStr(buf[i]);
end;

اگر قصد تغییر کد رو دارید، به هیچ وجه Push و Pop ها رو از کد برندارید.
ای بابا. این همه زور زدم اینو نوشتم آخر سر بنام مهمان پست شد. :cry: :wink:
یک دونه اگر تو کدی که نوشتی وجود داره: jc @carry_sets که معادل کد زیر هست:

c: boolean;

if c then goto carry_set;

اگر قراره دستورات شرطی ماشین رو شرط حساب نکنید پس این کد زیر هم باید جواب باشه٬ که البته نیست.

function Min(A, B: Integer): Integer;
asm
mov eax, A
cmp eax, B
jl @finish
mov eax, B
@finish:
end;

function Max(A, B: Integer): Integer;
asm
mov eax, A
cmp eax, B
ja @finish
mov eax, B
@finish:
end;