Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возведение матрицы в квадрат Pascal + ASM, Нужно возвести матрицу в квадрат  
:(
    Опции темы
rafic
Дата 14.4.2012, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача описана в названии темы. 
Я вот накидал тут что смог: 
Код

program kursach;
 
uses crt;
 
const
     max=4;
var
   Elements: array[1..max,1..max] of shortint;
 
   row,
   column,
   k,
   countRows,
   countColumns: integer;
 
begin
 
     clrscr;
 
     write('Count rows: ');
     readln(countRows);
 
     write('Count columns: ');
     readln(countColumns);
 
     writeln('Enter elements:');
 
     for row:=1 to countRows do
     begin
          for column:=1 to countColumns do
          begin
               write('Element[',row,',',column,']= ');
               readln(Elements[row,column]);
          end;
     end;
 
asm
 
   mov row, 0
   mov column, 0
   mov si, countRows
   mov bp, countColumns
 
   @@row:
 
         @@column:
            { Elements[countColumns*row+column]*4 }
 
             cmp column, bp
             inc column
         jl @@column
 
       cmp row, si
       inc row
   jl @@row
end;
 
 
     writeln;
     writeln('Square matrix:');
 
     for row:=1 to countRows do
     begin
        for column:=1 to countColumns do
            write(Elements[row,column],' ');
 
        writeln;
    end;
 
    readln;
end.

но столкнулся с ошибкой в которой сказано что в строке { Elements[countColumns*row+column]*4 } выделенное жирным место является неверным синтаксисом.

Ну и вообще я никогда не писал на связке паскаль и АСМ, и прошу подсказать как записывать результаты в конечный массив?
Адрес памяти высчитывать планирую по формуле
Код

baseName[countColunms*row+column]*4

Словесно: имя_массива(количество элементов в строке * текущая строка + номер элемента в данной строке) * на 4 (размер памяти под один элемент)

в общем... как-то так. 

1) Как обратится к элементу массива в таком коде?
2) Как записывать конечный результат в конечный массив элемент через mov? mov baseName[countColunms*row+column]*4, currentValue
3) Как умножать и складывать элементы массива? через imul?
PM MAIL   Вверх
iff
Дата 15.4.2012, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

Репутация: 4
Всего: 16



1) shortint - 1 байт.
2) т.к. row и column - не константы, не регистры, а переменные, то обращение типа baseName[countColunms*row+column] невозможно.
3) инструкцией mov можно записать результат в массив, но из регистра или непосредственно константу.
4) для разных типов данных можно использовать разные инструкции умножения. Для целых знаковых - действительно imul.


Это сообщение отредактировал(а) iff - 15.4.2012, 17:35


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
500mhz
Дата 17.4.2012, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



Цитата

 mov row, 0
 mov column, 0


не знаю как там в паскале но мне кажется нужно так
Цитата

 mov [row], 0
 mov [column], 0



--------------------

PM MAIL ICQ   Вверх
iff
Дата 17.4.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

Репутация: 4
Всего: 16



Код

mov di, Offset Elements
mov cx, Max * Max
@rep1:
mov al, [di]
imul al
mov [di], al
inc di
loop @rep1

вместо imul можно просто mul, результат одинаковый, т.к. получаться вегда (если нет переполнения) будут тольуо положительные числа.


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

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

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


 




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


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

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