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

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

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

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

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2013, 23:29
Ответы с готовыми решениями:

Почему два char нельзя сравнивать так ==?
Почему два char нельзя сравнивать так ==?

Почему GlobalAlloc выделяет память в файле подкачки? И как "обрезать" ненужную память?
Стоит задача: выделяю, например, 40 байт, потом нужно эти же 40 байт обрезать до 20, не изменяя...

Азы: статическая память, динамическая память, автоматическая память
столько раз приходистя возвращаться к началу, и все благодаря моим преподавателям, которые не...

Tasm 02h не выводит символ, записанный в память
Уже все перепробовал, в отладчике все значения правильные, в dl 31h НО выводит 0 всегда. ввод:...

19
Ушел с форума
Автор FAQ
14220 / 7095 / 847
Регистрация: 11.11.2010
Сообщений: 12,726
23.05.2013, 03:35 2
Lionische,
команды ассемблера не зависят от диалекта ассемблера, а сильно зависят от используемого микропроцессора
если прочитаешь учебник, то узнаешь о такой команде как CMPSB/W/D и ещё много другого не менее интересного
1
606 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
23.05.2013, 07:06 3
Lionische, я уже задавал этот вопрос (не помню в какой теме). Мне сказали, что интел криво строят свои процессоры (или я не так понял, но суть примерно такая). А некоторые другие камни с легкостью делают такие сравнения и пересылки данных
1
Ушел с форума
Автор FAQ
14220 / 7095 / 847
Регистрация: 11.11.2010
Сообщений: 12,726
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
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 11:42 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
push /pop
Разве в стек можно положить значение из памяти?

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

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

Не по теме:

Mikl___, ;D

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

Не по теме:

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

0
Ушел с форума
Автор FAQ
14220 / 7095 / 847
Регистрация: 11.11.2010
Сообщений: 12,726
23.05.2013, 12:35 13
sh2ezo,
Motorola (68000, 68020)https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow IBM PowerPC https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Intel
что еще раз опровергает сказку о кривых процессорах
0
sh2ezo
23.05.2013, 12:39
  #14

Не по теме:

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

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

0
Ушел с форума
Автор FAQ
14220 / 7095 / 847
Регистрация: 11.11.2010
Сообщений: 12,726
23.05.2013, 12:42 15
sh2ezo,
это снаружи ESI, EDI а внутри ХЗ, о "переименовании регистров" ничего не слышал?
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
23.05.2013, 12:46 16
Mikl___, неа О_о
0
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 12:55 17
Цитата Сообщение от Mikl___ Посмотреть сообщение
а внутри ХЗ
В принципе нам же не важно, как там внутри. В микрокоманды же почти никто не вникает. Разве что работники Intel
1
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
23.05.2013, 14:20  [ТС] 18
Цитата Сообщение от Mikl___ Посмотреть сообщение
Lionische,
команды ассемблера не зависят от диалекта ассемблера, а сильно зависят от используемого микропроцессора
если прочитаешь учебник, то узнаешь о такой команде как CMPSB/W/D и ещё много другого не менее интересного
И все равно что бы сравнить нужно занести значения в регистры SI и DI
0
Ушел с форума
Автор FAQ
14220 / 7095 / 847
Регистрация: 11.11.2010
Сообщений: 12,726
23.05.2013, 15:33 19
Цитата Сообщение от Lionische Посмотреть сообщение
И все равно что бы сравнить нужно занести значения в регистры SI и DI
И что? DS:[SI] и ES:[DI] -- это уже память, а не регистры
1
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
23.05.2013, 19:21  [ТС] 20
Цитата Сообщение от Mikl___ Посмотреть сообщение
И что? DS:[SI] и ES:[DI] -- это уже память, а не регистры
В общем я понял. Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2013, 19:21

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

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

Когда ставишь память в DIMM2, при этом приходится память переворачивать
Помогите мне. При добавление памяти в столкнулся с проблемой. Когда память стоит в DIMM1 (фото 1)...

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть...

Внешняя память PIC: как нарастить внутреннюю память данных?
Я только начал разбираться с ПИКами и пока не все понимаю. Мне нужно организовать систему сбора и...


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

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

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