|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
Обращение к переменным объекта с использованием указателя this из inline assembler21.09.2009, 22:15. Показов 7758. Ответов 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
|
|
| 22.09.2009, 19:31 | |
|
galileopro, push надо сделать один раз вне цикла. У тебя метка выше и он на каждом проходе делает push. Нужно или вынести из цикла, т.е сделать push до метки lp2, или где-то в цикле делать pop,только это вроде нафиг не надо.
Добавлено через 8 минут Да,по поводу не той ячейки - мы не учли,размер инта, нужно умножить содержимое ecx на 4( или сдвинуть влево на 2..). И для esi то же самое верно.Ща мануал посмотрю))
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 22.09.2009, 19:36 [ТС] | ||||||
|
Я попробовал "в лоб"
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 22.09.2009, 19:42 | |
|
У тебя там бесконечный цикл похоже.
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 22.09.2009, 19:48 [ТС] | ||||||
|
Вот еще упростил.
loop lp2 уменьшает постепенно регистр ecx, пока он не станет 0 dec esi //переходим к следующему столбцу - тоже вічитает, пока не занулится.
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|||||||||||
| 22.09.2009, 19:53 | |||||||||||
![]() Зато если сделать через this, как с MyMatrix
Я поправил,он вылетает с ошибкой,но хоть не циклится
1
|
|||||||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 22.09.2009, 20:03 [ТС] | |||||||||||
|
Вот так переписал
0
|
|||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 22.09.2009, 20:14 | ||||||
|
galileopro, причина такая.
mov [eax][смещение],что-то там.eax для примера,можно любой общего назначения. Причем адресовать сразу по ячейке памяти нельзя. Вот как это выглядит.Прошу прощения за убогость художества,но в пейнте красивее не сделаешь Но суть оно отражает. Другими словами еще раз - тебе нужно адресовать по ячейке памяти,там лежит адрес массива,который тебе выдал new когда ты создавал его. [ebx].MyVector[0] просто берет адрес этой ячейки и добавляет 0. А нужно взять тот адрес,который внутри записан и добавить к нему ноль. Вот разница.
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 22.09.2009, 20:26 [ТС] | ||||||
|
Примерно так?
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 22.09.2009, 20:32 | ||||||
|
galileopro, ты там регистры кажется перепутал. Но в общем я понял,что ты понял
![]() MyVector можно без индекса. В ассемблере индекс не делает разименование, еще одна формулировка предыдущего поста. Т.е в си применяя к указателю в памяти [] ты попадаешь на массив,а в асме - просто смещаешься куда-то дальше
0
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
| 22.09.2009, 20:39 [ТС] | ||||||
|
Ясно. А почему
Эта операция
eax = 3435973632 если ecx=5 при этом?
0
|
||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 22.09.2009, 20:45 | ||||||
|
galileopro, та же причина. Более того,тебе придется несколько раз обновлять регистр с указателем. В классе матрица представлена одним единственным указателем - он указывает на массив из указателей(вне класса,в динамической памяти), а они каждый на свой "вектор"(см. схему (= ). Чтобы добраться до значения тебе нужно :
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 22.09.2009, 20:58 [ТС] | |||||||||||
|
Все значения должны быть от 0 до 20 где-то
Добавлено через 7 минут Спасибо я понял. Вот переделал, но он вілетает.(
0
|
|||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 22.09.2009, 21:02 | |
|
galileopro, забыл умножить ecx на 4.Асм за размером не следит,он с байтами работает. Т.е читается какой-то левый указатель из,скажем, трех байт одного и одного байта следующего за ним
К тому же, если ecx == cols, то мы вылезем за границу,т.к массивы нумеруются с нуля.Добавлено через 26 секунд Я отойду минут на сорок.
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 22.09.2009, 21:24 [ТС] | |||||||||||
|
Вот слава Богу заработало
0
|
|||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 22.09.2009, 21:53 | |
|
mov eax,[eax][2] - это середина ячейки из 4-х байт.Умножай все индексы на 4 >_<
Добавлено через 1 минуту И у тебя очистка памяти неправильная delete MyMatrix; Нужно сначала удалить каждую строку матрицы, сколько раз вызвал new столько же раз вызывай delete. т.е циклом сначала все строки, MyMatrix[i],а потом саму MyMatrix
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 22.09.2009, 22:01 [ТС] | |||||||||||
|
Легко сказать умножай все на 4. Для єтого надо сначала засунуть множитель в eax, затем умножить, потом опять поместить в исходный регистр и восстановить eax. Это жуткий гемор.
Хотя можно
Добавлено через 2 минуты
0
|
|||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 22.09.2009, 22:16 | |
|
galileopro, нужно влево сдвигать,вроде shl
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||||||||||||
| 22.09.2009, 22:37 [ТС] | ||||||||||||||||
|
К сожалению
Работает нормально только
0
|
||||||||||||||||
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|||||||||||
| 22.09.2009, 22:58 | |||||||||||
А сдвигом вправо eax перед тем как его занести ты делишь то,что прочитал на 2^16 и получаешь чето маленькое,чего и хотел,но это вообще левая цифра. Я говорил про эту строку
1
|
|||||||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||||||||
| 23.09.2009, 21:24 [ТС] | ||||||||||||
Я что-то никак не пойму, что там на 4 умножать? Он после такого вылетает
0
|
||||||||||||
| 23.09.2009, 21:24 | |
|
Inline assembler mingw Inline Assembler & C++ написать программу движущийся графический объект с двумя способоми с использованием статического объекта и с использованием динамического объекта inline assembler VS чтение по указателю Как исправить код? / Inline assembler Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|