IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Массивы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Приведите, пожалуйста, кому не лень самый простой пример использования одномерного массива. Я Assembler начал изучать 2 часа назад... sad.gif С адресацией-то все вроде ясно, а вот для чего используют, например @0, @1, @2 не понятно. Азы читал...
Например, вычислить SUM(A*X), где A:array[1..5] of integer; X:integer;
И если можно, с подробным комментарием
Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


program AsmArray;

var
   a: array[1..5] of Integer;
   x, Sum,
   i: Integer;

begin
   Randomize;
   for i := 1 to 5 do
     begin
       a[i] := -9 + Random(20);
       Write(a[i], ' ');
     end;
   Writeln;

   x := 4;

   asm
      cld         { df := 0, lodsw будет УВЕЛИЧИВАТЬ si }
      xor dx,dx   { dx := 0 }
      lea si,a    { si := @a[0] }
      mov cx,5    { cx := 5, цикл на 5 интераций }
   @@Add:         { локальная (@@) метка }
      lodsw       { ax := слово по адресу ds:si - очередной эл-т массива, }
                  { si := si + 2 (2 = SizeOf(Integer)) }
      add dx,ax   { dx := dx+ ax; }
      loop @@Add  { cx := cx - 1; if cx <> 0 then goto @@Add; }
      mov ax,x    { ax := x }
      imul dx     { dx:ax := ax * dx }
      mov Sum,ax  { Sum := ax }
   end

   Writeln('Sum = ', Sum);
end.


Сообщение отредактировано: xds -


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 13.01.2025 6:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name