|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
Обращение к переменным объекта с использованием указателя this из inline assembler21.09.2009, 22:15. Показов 7552. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|