Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Двумерный массив: mas[si][di] или mas[esi][edi]  (Прочитано 13018 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
sawych
Гость
« : 01-10-2005 23:33 » new

Доброво времени суток.
На днях мне необходимо было написать программу (под Win),которая работала с 2-мерным массивом. Посмотрел мануалы, учебники, разобрался, только вот не захотел у меня MASM32 все это дело ассемблировать. Ошибка, которой он ругается вот:
error A2082: cannot mix 16- and 32-bit registers, ругается вот на эту строку:
Код:
mov	matr[si][di], al
Потом я исправил регистры si, di на 32 битные:
Код:
mov	matr[esi][edi], al
и все стало отлично. Так вот я и хотел спросить у Вас в чем была суть ошибки? Пожалуйста, кто знает ответьте.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-10-2005 15:42 » 

sawych, надо понимать немного в теории.
В кодах i386 косвенная адресация в 32-битном режиме делается по принципу:
effective address =  (base) + (index * scale) + (offset)
Компоненты, расположенные справа, все не обязательные (но хотя бы одна должна быть). Если scale == 1, то ее можно не писать. Scale бывает 1, 2, 4 и 8. Все состовляющие уравнения имеют одну размерность - 32 бит (смещение может быть 32 или 8 бит). Для 16-битного режима адресации другой принцип вычисления адреса (значиииительно беднее).

В твоем случае ESI выступает в роли base, EDI - index, scale == 1, "matr" - offset и форма адресации - 32бит. тут просто нет возможности пристроить 16-битный регистр.
« Последнее редактирование: 03-10-2005 15:48 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гектор
Гость
« Ответ #2 : 13-10-2005 12:28 » 

как в ASSEMBLER-е(в любом) реализовать случайного числа в диапазоне от n до m
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 13-10-2005 13:43 » 

Гектор, не надо все валить в одну кучу: если у тебя есть вопрос, который к текущей теме не имеет  никакого отношения, то создавай отдельную тему. Не надо забывать, что кто-то пользуется поиском и не хотелось бы, чтобы они находили бардак.


По вопросу: поищи алгоритмы вычисления псевдослучайных чисел. На ассемблере они работают так же, как и на других языках.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гектор
Гость
« Ответ #4 : 13-10-2005 15:33 » 

ok!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines