Поменять числа местами - 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
Листинг программы
 mov al,a
 lea bx,b
 xchg al,[bx]
 mov a,al

Объяснение кода листинга программы

  1. Создается переменная a со значением, которое нужно поменять местами с другой переменной.
  2. Создается переменная b, которая указывает на адрес, где находится значение, с которым нужно поменять a местами.
  3. Происходит обмен значений между регистром al и значением, на которое указывает bx. То есть, значение переменной a сохраняется в регистре al, а значение из ячейки памяти, на которую указывает bx, записывается в переменную a.
  4. Значение из регистра al (которое до обмена было в переменной a) записывается обратно в переменную a. Теперь значения переменных поменялись местами.

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы