Поменять числа местами - Assembler

Формулировка задачи:

Здравствуйте, суть программы состоит в том, что вводятся 2 числа(byte) и нужно 4 различными способами поменять их местами. В LabeledEdit1 вводится первое число, В LabeledEdit2 вводится второе число, BitBtn для использования нужного способа, интерефейс пока не отладил должным способом, прошу не придираться. В данный момент написал только 2 работающих способа, 3й(через stack)способ через не могу отладить, до 4го пока не додумался, может кто-нибудь дать наводку как можно поменять 4ым(не через дополнительную переменную) способом? Используется встроенный asm на Delphi. Так же если у Вас имеются предложения по оптимизации готовых способов - готов выслушать.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
a,b:byte;
begin
  a:=strtoint(form1.LabeledEdit1.text);
  b:=strtoint(form1.LabeledEdit2.text);
  asm
    mov al,a
    mov bl,b
    xchg al,bl
    mov a,al
    mov b,bl
  end;
  form1.LabeledEdit1.text:=inttostr(a);
  form1.LabeledEdit2.text:=inttostr(b);
end;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
var
a,b:byte;
begin
  a:=strtoint(form1.LabeledEdit1.text);
  b:=strtoint(form1.LabeledEdit2.text);
  asm
    mov al,a
    mov bl,b
    add al,bl
    sub bl,al
    neg bl
    sub al,bl
    mov a,al
    mov b,bl
    end;
    form1.LabeledEdit1.text:=inttostr(a);
    form1.LabeledEdit2.text:=inttostr(b);
end;
 
procedure TForm1.BitBtn3Click(Sender: TObject);
var
a,b:byte;
begin
  a:=strtoint(form1.LabeledEdit1.text);
  b:=strtoint(form1.LabeledEdit2.text);
  asm
    pushad
    mov al,a
    mov bl,b
    push al
    push bl
    pop al
    pop bl
    mov a,al
    mov b,bl
    popad
  end;
  form1.LabeledEdit1.text:=inttostr(a);
  form1.LabeledEdit2.text:=inttostr(b);
end;


textual

Код к задаче: «Поменять числа местами - Assembler»

 mov al,a
 lea bx,b
 xchg al,[bx]
 mov a,al
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 4.250 из 5

Источник