|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
Обращение к переменным объекта с использованием указателя this из inline assembler21.09.2009, 22:15. Показов 7509. Ответов 74
Метки нет (Все метки)
Мне нужно написать класс на С++ с учетом возможности ввода количества столбцов и строк матрицы. Матрица должна размещаться в динамической памяти. Переменные указателя на матрицу и размеров матрицы должны быть нестатическими членами класса. Обращение к переменным должно осуществляться с использованием указателя this без использования оператора разыменования указателя (->). Вся выделяемая память в программе должна быть освобождена перед выходом.
Я сделал так, но пишет ошибки:
Добавлено через 38 минут Вот так получилось. А как массив задать?
0
|
|||||||||||
| 21.09.2009, 22:15 | |
|
Ответы с готовыми решениями:
74
GCC Inline Assembly перевести в Visual Studio Inline Assembler inline assembler в СИ Преобразование кода без указателя в код с использованием указателя |
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 23.09.2009, 22:16 | ||||||
|
galileopro, Я сейчас готовлю тортик
Отпишу тебе через полчасаДобавлено через 41 минуту Короче,смотри. Инт занимает 4 байта. Это значит,что i-й элемент массива сдвинут на (i-1)*4 байт от начала (i-1 т.к с нуля нумерация). Я сейчас говорю про эти команды :
Получается первый элемент. Правда,если он очень большой ничего не выйдет ) Хотя,подожди,может,ты на самом деле получаешь второй.Поскольку двойные слова хранятся в перевернутом виде. Да,это вероятно.Короче,не суть важно,главное,что это - не тоКогда я говорил про умножение на четыре - я говорил про умножение индексов в скобках. Сейчас ты можешь просто написать вместо [2] [8],но когда будешь делать проход в цикле,тебе нужно будет либо инкрементировать регистр на 4 сразу,либо на 1 а потом запихивать в какойнить другой и умножать на 4. Примерно так. Сам EAX умножать и сдвигать не надо - ты уже считал туда какое-то значение,это не каретка которая туда-сюда ездит
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 23.09.2009, 22:31 [ТС] | |
|
А в eax можно засунуть только 2 байта?
0
|
|
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||
| 23.09.2009, 22:34 | ||
![]() Кстати,все,что я говорю,актуально для 32-битных платформ. С 64битными что-то по-другому,но что я не знаю,т.к студия даже инлайн ассемблер для них не поймет.
1
|
||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 23.09.2009, 22:40 [ТС] | ||||||
|
Тогда вот этот код должен запихивать в eax первый элемент массива?
4 байта с 0 по 4?
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 22:44 | |
|
Да!
Тебе придется повозиться когда будешь делать цикл,но что поделать.
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 23.09.2009, 22:47 [ТС] | ||||||
|
Да не в этом дело. Вот смотри, такой код выводит на экран 34356... не помню, но большое число, хотя у меня все элементы массива нулевые.
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 23.09.2009, 22:48 | ||||||
|
А,нет.Зачем ты убрал один из мувов
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 23.09.2009, 22:50 [ТС] | ||||||
|
Выводит 3433272
Добавлено через 2 минуты
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 23.09.2009, 22:52 | ||||||
Добавлено через 27 секунд galileopro, у тебя матрица. Там два индекса,ты применил только один.Ты выводишь адрес нулевой строки этим кодом. Добавлено через 33 секунды В общем,чтобы понять,перерисуй картинку которую я раньше постил и пойми,что к чему и при чем здесь эти команды (mov eax,[eax][0]).Разберись, почему их две очень похожих.
0
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||
| 23.09.2009, 22:54 [ТС] | |||||||
|
Я писал
0
|
|||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 22:56 | |
|
А ты посмотри,как создается у тебя матрица.Матрица состоит аж из n массивов,по строке на массив. Первый мув - ты выбираешь нужную строку. Второй мув - в строке,как в массиве, выбираешь нужный элемент. Сама переменнная MyMatrix указывает на массив указателей из n штук. Ты кидаешь нужный указатель в eax,а потом уже смещаешься внутри этого массива.Посмотри картинку
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 23.09.2009, 22:57 [ТС] | ||||||
|
Опа понял. Вот это работает нормально, это действительно 1 элемент
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 22:58 | |
![]() Разобрались,кажется
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 23.09.2009, 23:01 [ТС] | |||||||||||
|
Слушай, а что засунется в eax таким кодом
А тогда таким
0
|
|||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 23:05 | |
|
galileopro, Указатель и весит четыре байта.Попробуй sizeof(int* ) :-) Именно в честь 32х битной адресации платформа называется 32битной
Именно потому адресуется 4гига оперативки,это ведь 2^32 ![]() Добавлено через 58 секунд P.S не ориентируйся на урезанный (по современным меркам,конечно ) ассемблер с 2^20 адресуемых байт, в котором многих гоняли на занятиях. Тут все по-другому, защищенный режим памяти
0
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 23.09.2009, 23:07 [ТС] | |
|
There are 10 types of people:Those,who understand binary and those,who dont. - жжет. Причем многие мои знакомые(хотя вроде компьютер не только один раз видели) этой шутки не монимают)
0
|
|
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 23:09 | |
|
galileopro,
Давай только не будем оффтопить.Мне не положено )) У нас полезная тема получилась. Как доделаешь, выкладывай готовый код,я его в первый пост подкреплю. Ну и если что обращайся,конечно
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 23.09.2009, 23:14 [ТС] | ||||||
|
Я все понимаю, но мне очччень хочется узнать: ТО число которое помещается в eax кодом
Добавлено через 3 минуты Не по теме: Это как раз прога была по изучаемой теме. Я уж извиняюсь, что приколебался.
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 23.09.2009, 23:17 | |
|
[ebx].MyMatrix(то же,что this->MyMatrix в С++ ) - это указатель на массив указателей,каждый из которых в свою очередь указывает на нужную строку
Помещая MyMatrix[0],MyMatrix[4] и т д ты помещаешь указатель на нужный массив в eax. Потом делаешь ту же операцию с eax, разыменовывая тем самым еще один указатель. Т.е в С++ ты пишешь MyMatrix[i][j] - операций разыменования две. Вот и в ассемблере их две.
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 24.09.2009, 00:16 [ТС] | |||||||||||
|
Вот написал код, он должен суммировать все элементы матрицы, но он выводит 20278....
Где может быть ошибка?
Вот переделал, вроде пока ошибок не видел, но выводит бред(
0
|
|||||||||||
| 24.09.2009, 00:16 | |
|
Inline assembler mingw Inline Assembler & C++ написать программу движущийся графический объект с двумя способоми с использованием статического объекта и с использованием динамического объекта inline assembler VS чтение по указателю Как исправить код? / Inline assembler Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|