Поменять числа местами - 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
Объяснение кода листинга программы
- Создается переменная
a
со значением, которое нужно поменять местами с другой переменной. - Создается переменная
b
, которая указывает на адрес, где находится значение, с которым нужно поменятьa
местами. - Происходит обмен значений между регистром
al
и значением, на которое указываетbx
. То есть, значение переменнойa
сохраняется в регистреal
, а значение из ячейки памяти, на которую указываетbx
, записывается в переменнуюa
. - Значение из регистра
al
(которое до обмена было в переменнойa
) записывается обратно в переменнуюa
. Теперь значения переменных поменялись местами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д