Поменять числа местами - 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
. Теперь значения переменных поменялись местами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д