Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный массив - перейти на новую строку 
V
    Опции темы
DragonFire
Дата 20.5.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Пишу перемножение матрицы:
Код

__asm{
        mov ecx,N    //Запускаем первый цикл i
        _for1:        //Место входа в первый цикл 
        push ecx    //Запоминаем счетчик первого цикла в ebx
        mov ecx,N    //Запускаем второй цикл j
        _for2:        //Место входа во второй цикл
            mov ebx,0    //Кладем в ebx (sum) 0
            push ecx    //Запоминаем счетчик второго цикла в edx
            mov ecx,N    //Запускаем третий цикл n
            _for3:        //Место входа в третий цикл
                push ebx    //Запоминаем ebx (сумму)
                mov eax,M1    //Кладем элемент первой матрицы (должно быть M1[i,n])
                mov ebx,M2    //Кладем элемент второй матрицы (должно быть M1[n,j])
                mul ebx        //Перемножаем 
                pop ebx        //Возращаем сумму
                add ebx,eax    //Добавляем к сумме
            loop _for3    
            pop ecx                //Возвращаем счетчик второго цикла из ebx
            mov [Masm+ecx*4-4],ebx    //Сохраняем полученное значение в массив    (должно быть Masm[i,j], сейчас Masm[i,0])    
        loop _for2 
        pop ecx        //Восстанавливаем счетчик первого цикла из ebx
        loop _for1 
    }

Осталось сделать движение по массивам M1,M2 и Masm. Проблема в том, что при попытке использовать разные регистры в конструкции [], например [Masm+ecx*4-4+ebx] - выдается ошибка. 
Слышал что-то про сдвиги хитрые. В общем хотя бы направьте в нужную сторону.

Заранее спасибо. 


--------------------
PM MAIL ICQ   Вверх
dumb
Дата 21.5.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(DragonFire @  21.5.2009,  00:08 Найти цитируемый пост)
например [Masm+ecx*4-4+ebx] - выдается ошибка

скромнее надо быть: Indirect memory addressing
PM MAIL   Вверх
DragonFire
Дата 21.5.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



А все же... Почитал книгу ту по ссылке, но так и не понял как решить мою задачу.


--------------------
PM MAIL ICQ   Вверх
airyashov
Дата 21.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(dumb @ 21.5.2009,  01:08)
Цитата(DragonFire @  21.5.2009,  00:08 Найти цитируемый пост)
например [Masm+ecx*4-4+ebx] - выдается ошибка

скромнее надо быть: Indirect memory addressing

Я тоже посмотрел и не уверен что такая адресация возможно в 16 битном режиме, стр.70


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
Mikl_
Дата 21.5.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



airyashov, а причем здесь 16-битный режим, у DragonFire, везде 32-разрядные регистры? smile 
PM MAIL   Вверх
DragonFire
Дата 21.5.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Везде  smile  smile  smile  smile  smile  smile 


--------------------
PM MAIL ICQ   Вверх
dumb
Дата 22.5.2009, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(DragonFire @  21.5.2009,  00:08 Найти цитируемый пост)
например [Masm+ecx*4-4+ebx] - выдается ошибка

мой призыв к скромности был преждевременным. smile:
эти "скобки" вполне компилируемы: ebx - base, ecx - index, *4 - scale, Masm-4 - displacement
PM MAIL   Вверх
Mikl_
Дата 22.5.2009, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



DragonFire, чем клянчить примеры, напиши свою задачу на С и посмотри под отладчиком, в какие команды на ассемблере ее перепишет компилятор, затем выкини "лишние" команды и ассемблерная вставка готова smile 
PM MAIL   Вверх
DragonFire
Дата 22.5.2009, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Mikl_, Написана прога. 
И как поглядеть во что ее превращает компилятор? З.Ы. юзаю VS 2008


--------------------
PM MAIL ICQ   Вверх
Mikl_
Дата 22.5.2009, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



DragonFire, не знаю как в VS 2008, но там должно быть меню Debug -- ставишь точку останова на первой строке своей программы, которая относится к перемножению матриц и смотришь в окошко каким коммандам на ассемблере все это соответствует
PM MAIL   Вверх
airyashov
Дата 22.5.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(Mikl_ @ 21.5.2009,  11:54)
airyashov, а причем здесь 16-битный режим, у DragonFire, везде 32-разрядные регистры? smile

Я про книгу написал


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
airyashov
Дата 22.5.2009, 10:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(dumb @ 22.5.2009,  02:58)
Цитата(DragonFire @  21.5.2009,  00:08 Найти цитируемый пост)
например [Masm+ecx*4-4+ebx] - выдается ошибка

мой призыв к скромности был преждевременным. smile:
эти "скобки" вполне компилируемы: ebx - base, ecx - index, *4 - scale, Masm-4 - displacement

Ваш призыв был верен, просто переменные адресуется через стек и Masm это по другому EBP+offset






--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
DragonFire
Дата 22.5.2009, 15:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Хорошо, если с двойной адресацией никто не знаком, расскажите плиз. о том как положить адрес в регистр и потом по нему записать данные, что то типо:
mov eax,адрес Masm
add eax,ebx*4 (скажем 2*4 - сдвиг у мну по i)
add eax,ecx (скажем 3 - сдвиг у мну по j)
add eax,-4 (тоже сдвиг)
mov по адресу eax,5 (тут 5 - число любом, просто для примера).


--------------------
PM MAIL ICQ   Вверх
DragonFire
Дата 23.5.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Все, написал, всем спасибо.



--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.