Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Lionische
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
#1

Почему в TASM нельзя сравнивать память-память? - Assembler

22.05.2013, 23:29. Просмотров 966. Ответов 19
Метки нет (Все метки)

То есть я понимаю, что можно либо регистр-память, либо память-регистр, либо регистр-регистр. Но почему так? И существуют ли методы, как это обойти, кроме как заносить значение переменной в содержимое регистра?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 23:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Почему в TASM нельзя сравнивать память-память? (Assembler):

Выделить динамически память под размер файла. TASM
Доброго времени суток. Вот имеется такой код, пытаюсь выделить область памяти...

Память
Как прописать exeшнику, где в памяти он должен расположиться и использовать ли...

память
Начальный адрес Память Дес. Шест. ...

выделить память
Как выделить память из глобальной? Только нужно это сделать так, чтобы регистры...

Память компьютера
..разбираюсь с памятью, и хотел-бы поделиться. в своих догадках вполне могу...

Кэш-память
Доброго времени суток! Подскажите пожалуйста, как можно достать информацию о...

19
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 03:35 #2
Lionische,
команды ассемблера не зависят от диалекта ассемблера, а сильно зависят от используемого микропроцессора
если прочитаешь учебник, то узнаешь о такой команде как CMPSB/W/D и ещё много другого не менее интересного
1
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,070
23.05.2013, 07:06 #3
Lionische, я уже задавал этот вопрос (не помню в какой теме). Мне сказали, что интел криво строят свои процессоры (или я не так понял, но суть примерно такая). А некоторые другие камни с легкостью делают такие сравнения и пересылки данных
1
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 09:57 #4
Troll_Face,
если бы "интел криво строил свои процессоры", то все бы сидели на Маках, Мотороллах, Самсунгах и т.п., а пока этого не наблюдается, по поводу команды сравнения CMPSB/W/D я уже написал, теперь по поводу команд пересылок без использования "либо регистр-память, либо память-регистр, либо регистр-регистр" загибай пальцы:
  1. push /pop
  2. rep movsb/w/d
  3. пересылки по 8 байт циклом из mmx команда movsq
  4. пересылки по 10 байт циклом fld tbyte ptr [x]/fstp tbyte ptr [y]/add x,10/add y,10
1
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 11:42 #5
Цитата Сообщение от Mikl___ Посмотреть сообщение
push /pop
Разве в стек можно положить значение из памяти?

Цитата Сообщение от Mikl___ Посмотреть сообщение
сидели на Маках
Риски дорого стоят. Ну и кое где на них сидят все-таки.
1
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 11:54 #6
TheFox,
а стек это не память?
"кое-где" погоды на компьютерном рынке не делает
0
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 11:56 #7
Цитата Сообщение от Mikl___ Посмотреть сообщение
а стек это не память?
Ну дак это в память из регистра, а не из памяти в память.
0
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 12:00 #8
Цитата Сообщение от TheFox Посмотреть сообщение
Ну дак это в память из регистра, а не из памяти в память.
TheFox,
не впадай в ересь, вполне работоспособный фрагмент по переносу содержимого из ячейки памяти Mem1 в Mem2, посмотри на работу в дебагере
Assembler
1
2
push Mem1
pop Mem2
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,070
23.05.2013, 12:02 #9
TheFox, 186 вроде камень уже позволяет делать
Assembler
1
2
push mem
pop mem
386 точно умеет

Добавлено через 38 секунд

Не по теме:

Mikl___, ;D

0
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 12:11 #10
Цитата Сообщение от Mikl___ Посмотреть сообщение
вполне работоспособный фрагмент
Значит лектор ввел в заблуждение. Надо будет припомнить это ему на экзамене.
0
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 12:19 #11
TheFox,
ценность ассемблера в том, что здесь всё можно проверить, и работу программы посмотреть собственными глазами в отладчике, на 8086 да нельзя было переслать непосредственное значение в стек, нельзя было сдвинуть содержимое регистра/памяти больше чем на 1 разряд или только через содержимое регистра CL, но это было в далеком 1976, уже intel80186 умеет пересылать в стек непосредственное значение, значение из памяти, сдвигать влево/вправо на непосредственное число от 0 до 31, причем всё это рассказано не в закрытой литературе для служебного пользования, а в большинстве учебниках по ассемблеру
0
sh2ezo
23.05.2013, 12:30
  #12

Не по теме:

Mikl___, а Маки не на интеловском ли железе делаются?

0
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 12:35 #13
sh2ezo,
Motorola (68000, 68020)http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow IBM PowerPC http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Intel
что еще раз опровергает сказку о кривых процессорах
0
sh2ezo
23.05.2013, 12:39
  #14

Не по теме:

Mikl___, аа. А то я прост не понял про Маки, моторолы и т.д.

но мне кажется, что команду для прямой пересылки адрес-адрес без использования фиксированных регистров ESI и EDI ввести в x86 не помешало бы. Прогеры были бы благодарны, ИМХО))

0
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 12:42 #15
sh2ezo,
это снаружи ESI, EDI а внутри ХЗ, о "переименовании регистров" ничего не слышал?
0
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
23.05.2013, 12:46 #16
Mikl___, неа О_о
0
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 12:55 #17
Цитата Сообщение от Mikl___ Посмотреть сообщение
а внутри ХЗ
В принципе нам же не важно, как там внутри. В микрокоманды же почти никто не вникает. Разве что работники Intel
1
Lionische
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
23.05.2013, 14:20  [ТС] #18
Цитата Сообщение от Mikl___ Посмотреть сообщение
Lionische,
команды ассемблера не зависят от диалекта ассемблера, а сильно зависят от используемого микропроцессора
если прочитаешь учебник, то узнаешь о такой команде как CMPSB/W/D и ещё много другого не менее интересного
И все равно что бы сравнить нужно занести значения в регистры SI и DI
0
Mikl___
Автор FAQ
11379 / 5922 / 535
Регистрация: 11.11.2010
Сообщений: 10,938
23.05.2013, 15:33 #19
Цитата Сообщение от Lionische Посмотреть сообщение
И все равно что бы сравнить нужно занести значения в регистры SI и DI
И что? DS:[SI] и ES:[DI] -- это уже память, а не регистры
1
Lionische
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
23.05.2013, 19:21  [ТС] #20
Цитата Сообщение от Mikl___ Посмотреть сообщение
И что? DS:[SI] и ES:[DI] -- это уже память, а не регистры
В общем я понял. Спасибо
0
23.05.2013, 19:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 19:21
Привет! Вот еще темы с решениями:

Память для приложения
Откуда лучше выделять память и как. Обычно пользуюсь: GlobalAlloc GlobalLock...

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу...

Проверка ввода в память
sseg segment para stack 'stack' db 256 dup(?) sseg ends ; пункт #1...

Ввод файла в память.
Здравствуйте. Хочу ввести файл в память es. Приглашение ввести...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru