Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
 
Lionische
5 / 1 / 1
Регистрация: 19.02.2012
Сообщений: 33
#1

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

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

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

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

память - Assembler
Начальный адрес Память Дес. Шест. -----------------------------¬ 0K 00000 ¦ RAM 256K...

Память - Assembler
Как прописать exeшнику, где в памяти он должен расположиться и использовать ли ему файл подкачки?

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

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

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

19
Mikl___
Заблокирован
Автор FAQ
23.05.2013, 03:35 #2
Lionische,
команды ассемблера не зависят от диалекта ассемблера, а сильно зависят от используемого микропроцессора
если прочитаешь учебник, то узнаешь о такой команде как CMPSB/W/D и ещё много другого не менее интересного
1
Troll_Face
603 / 403 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
23.05.2013, 07:06 #3
Lionische, я уже задавал этот вопрос (не помню в какой теме). Мне сказали, что интел криво строят свои процессоры (или я не так понял, но суть примерно такая). А некоторые другие камни с легкостью делают такие сравнения и пересылки данных
1
Mikl___
Заблокирован
Автор FAQ
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
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
23.05.2013, 12:00 #8
Цитата Сообщение от TheFox Посмотреть сообщение
Ну дак это в память из регистра, а не из памяти в память.
TheFox,
не впадай в ересь, вполне работоспособный фрагмент по переносу содержимого из ячейки памяти Mem1 в Mem2, посмотри на работу в дебагере
Assembler
1
2
push Mem1
pop Mem2
0
Troll_Face
603 / 403 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
23.05.2013, 12:02 #9
TheFox, 186 вроде камень уже позволяет делать
Assembler
1
2
push mem
pop mem
386 точно умеет

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

Не по теме:

Mikl___,

0
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
23.05.2013, 12:11 #10
Цитата Сообщение от Mikl___ Посмотреть сообщение
вполне работоспособный фрагмент
Значит лектор ввел в заблуждение. Надо будет припомнить это ему на экзамене.
0
Mikl___
Заблокирован
Автор FAQ
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
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
23.05.2013, 12:42 #15
sh2ezo,
это снаружи ESI, EDI а внутри ХЗ, о "переименовании регистров" ничего не слышал?
0
23.05.2013, 12:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 12:42
Привет! Вот еще темы с ответами:

Ввод файла в память. - Assembler
Здравствуйте. Хочу ввести файл в память es. Приглашение ввести получилось. Рассматриваю различные функции не могу найти нужную....

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

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

Динамическая память под объекты - Assembler
Всем привет! Начал изучать язык ассемблера (intel) и появилось куча вопросов. Собественно сейчас интересует как работать с...


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

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

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