Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 17
1

Обмен значений двух четырехбайтовых переменных без использования xchg

01.02.2014, 01:11. Показов 2740. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Подскажите, пожалуйста, как можно реализовать обмен значений двух
четырехбайтовых переменных без использования xchg?
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2014, 01:11
Ответы с готовыми решениями:

Обмен значений двух переменных без использования дополнительной переменной
Как сделать обмен значений двух переменных без использования дополнительной переменной?

Обмен значениями двух переменных А и В без использования вспомогательной переменной
Сконструировать алгоритм обмена значениями двух переменных А и В без использования вспомогательной...

Нужно реализовать обмен данными переменных между C# и PHP без использования сервера
Понимаете, тут такое дело... Вообщем пишу что-то типа браузера, сам браузер написан ещё 150 тысяч...

Обмен значений двух переменных
Ниже решение задачи (Задана целочисленная последовательность A = (a i), i = 1..n, n <= 100.*...

5
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
01.02.2014, 01:35 2
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

FASM

Assembler
1
2
3
4
5
6
7
Per_1 dd 12345678h
Per_2 dd 87654321h
 
mov EAX,[Per_1]
mov EBX,[Per_2]
mov [Per_1],EBX
mov [Per_2],EAX
На вскидку.
1
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
01.02.2014, 02:58 3
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

То-же самое, но с использованием одного регистра :

Assembler
1
2
3
4
5
6
7
Per_1 dd 12345678h
Per_2 dd 87654321h
 
mov EAX,[Per_1]
xor EAX,[Per_2]
xor [Per_1],EAX
xor [Per_2],EAX
1
Ушел с форума
Автор FAQ
16281 / 7605 / 1066
Регистрация: 11.11.2010
Сообщений: 13,618
01.02.2014, 05:08 4
то же самое с использованием стековых команд
Assembler
1
2
3
4
5
6
7
Per_1 dd 12345678h
Per_2 dd 87654321h
 
push [Per_1]
push [Per_2]
pop [Per_1]
pop [Per_2]
использование промежуточной ячейки в памяти
Assembler
1
2
3
4
5
6
7
8
9
10
Per_1 dd 12345678h
Per_2 dd 87654321h
temp dd ?
 
mov eax,[Per_1]
mov [temp],eax
mov eax,[Per_2]
mov [Per_1],eax
mov eax,[temp]
mov [Per_2],eax
с использованием FPU
Assembler
1
2
3
4
fld [Per_1]
fld [Per_2]
fstp [Per_1]
fstp [Per_2]
https://www.cyberforum.ru/asse... 05284.html https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Глава 7. КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Команда XCHG https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Эквиваленты команды XCHG EAX,EBX

PS использование нескольких команд XOR вместо команды XCHG при одинаковом содержимом [Per_1] и [Per_2] может привести к обнулению обеих переменных, поэтому желательно перед обменом проверить их содержимое на равенство и если равны, то отказаться от обмена
1
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
01.02.2014, 05:38 5
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от Mikl___ Посмотреть сообщение
PS использование нескольких команд XOR вместо команды XCHG при одинаковом содержимом [Per_1] и [Per_2] может привести к обнулению обеих переменных, поэтому желательно перед обменом проверить их содержимое на равенство и если равны, то отказаться от обмена
Это не так. Пусть Per_1 = Per_2. Тогда
mov EAX,[Per_1]
xor EAX,[Per_2] ; даст в регистре EAX ноль и
xor [Per_1],EAX ; не изменит Per_1
xor [Per_2],EAX ; не изменит Per_2
2
Ушел с форума
Автор FAQ
16281 / 7605 / 1066
Регистрация: 11.11.2010
Сообщений: 13,618
01.02.2014, 05:54 6
Assembler
1
2
3
4
5
6
7
8
9
10
11
mov eax,12345678h
mov ebx,12345678h
xor eax,ebx; eax=0 ebx=12345678h
xor ebx,eax; eax=0 ebx=12345678h
xor eax,ebx; eax=12345678h ebx=12345678h
;--------------------------------------
mov eax,12345678h
mov ebx,87654321h
xor eax,ebx; eax=95511559h ebx=87654321h
xor ebx,eax; eax=95511559h ebx=12345678h
xor eax,ebx; eax=87654321h ebx=12345678h
Да, я не прав!
1
01.02.2014, 05:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2014, 05:54
Помогаю со студенческими работами здесь

Обмен значений двух целочисленных переменных
Напишите программу, которая считывает значения двух целочисленных переменных a и b, затем меняет их...

Обмен значений двух переменных типа char
Не знаю как вообще использовать такой тип как char, сама программа звучит так: Даны значения...

Обмен значений двух переменных типа char
Не знаю как вообще использовать такой тип как char, сама программа звучит так: Даны значения...

Обмен значений соседних пар символов файла местами (без использования дополнительных контейнеров)
Здравствуйте, уважаемые форумчане! Немного углубился в изучение текстовых файлов. Поставил перед...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru