Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
1

Объясните пожалуйства как массив загружается в регистр

25.05.2012, 15:00. Просмотров 401. Ответов 8
Метки нет (Все метки)

Не пойму как массив (адрес массива) загружается в регистр. Здесь переменная Mas указанна только в функции, но не написано, что это массив a из 5 элементов.Ведь гдето должно быть указанно что Mas и а это одно и тоже.
Условие задачи:
Найти среднее арифметическое 5-и элементного массива.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Program LAB1;
const
  N = 5;    {kolichestvo elementov massiva}
var  a : array[1..N] of integer;    {massiv celyh chisel}
     i : integer;
function SRZN (var Mas; N : Integer) : Integer;
begin
    asm
      LDS       SI, Mas     {adres massiva}
      XOR       AX, AX  {0 -v registr AX}
      MOV       BX, 0   {obnulyaem summu elementov}
      MOV       CX,N    {chislo elementov massiva}
@@1:  LODSW     {zagruzka elementov massiva}
      ADD       BX,AX   {uvelichivaem summu}
@@2:  LOOP      @@1     {zaciklivaem}
@@3:  MOV       @Result,BX  {zapisyvaem rezultat funkcii}
    end
end;
 
begin
 
  Writeln('Vvedite elementy massiva.');
  for i:=1 to N do begin
      write('a[',i,']=');
      readln(a[i]);
  end;
  WriteLn ('Srednee znachenie = ', SRZN(a, N)/N:3:3);
  ReadLn
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 15:00
Ответы с готовыми решениями:

Даны два числа. Записать в регистр SI меньшее, а в регистр DI - большее из них
Даны два числа. Записать в регистр SI меньшее, а в регистр DI - большее из них.

Занести в регистр AX значение регистра CS, а в регистр BL записать заданное число
Здравствуйте, у меня такая проблема: Нужно составить программу, которая заносит...

Поместить в регистр BX константу 100 (16). Старший байт BX переместить в регистр BL
здраствуйте помогите пож-та разобраться в задаче!написал прогу но не работает!...

массив на 10 элементов типа слово, записать 5 элемент в регистр dx
Задание: массив на 10 элементов типа слово, записать 5 элемент в регистр dx...

Объясните, почему с этим кодом страница загружается без конца?
Здравствуйте! Скажите пожалуйста, почему JavaScript с таким кодом, страница...

8
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
25.05.2012, 16:10 2
Цитата Сообщение от Rus7am Посмотреть сообщение
Ведь гдето должно быть указанно что Mas и а это одно и тоже.
Mas - имя формального параметра. A - действительный параметр, только подпрограмма считает этот массив переменной Mas. Понял? Или доходчивей объяснить?
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
25.05.2012, 21:05 3
Программист, слегонца дополню: параметры в функции передаются через стек, а Mas просто указывает на ячейку в стеке, куда помещается адрес массива.
2
Rus7am
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 53
26.05.2012, 09:59  [ТС] 4
Цитата Сообщение от programmisto Посмотреть сообщение
Mas - имя формального параметра. A - действительный параметр, только подпрограмма считает этот массив переменной Mas. Понял? Или доходчивей объяснить?
Я понял так, что Mas и a внутрипрограммно одна и таже переменная?
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
26.05.2012, 10:03 5
Цитата Сообщение от Rus7am Посмотреть сообщение
Я понял так, что Mas и a внутрипрограммно одна и таже переменная?
В твоем случае, да.
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
26.05.2012, 10:15 6
Цитата Сообщение от programmisto Посмотреть сообщение
В твоем случае, да.
ээээээээээ не совсем да... понимаешь ли, mas хранится в стеке как локальная переменная, а переменная а (массив) он как бы не сам передается в функцию (не каждый его элемент), а только адрес на него, иначе было бы не разумное расходование стека (представь себе если под стек определи 100h байт, а массив весит 200h, то произойдет переполнение). в mas попадет не сам массив с его элементами, а только адрес на массив.

и кстати: это как ты массив в функцию передаешь?????
Цитата Сообщение от Rus7am Посмотреть сообщение
Pascal
1
SRZN(a, N)/N
Добавлено через 3 минуты
надо так делать:
Pascal
1
2
3
4
type massiv = array [1..N] of integer
var a:massiv
.........
function SRZN (var Mas:massiv; N : Integer) : Integer;
не ругай если где-то ошибся, с паскалем давно не разговаривал, но что массив в функцию передать нельзя, знаю точно.
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
26.05.2012, 13:13 7
Цитата Сообщение от Fatal Error Посмотреть сообщение
var Mas:massiv
Да, правда. Читал в книге про Delpheй, что var и out передают только указатели. Out- разрешен вывод, var - разрешен только ввод.
0
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
26.05.2012, 13:32 8
Цитата Сообщение от programmisto Посмотреть сообщение
out
что за out? просвети бездарного
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
26.05.2012, 13:48 9
Fatal Error, Out - параметр, который запрещено читать в процедуре, но разрешается туда записывать. По сути, Var и Out идентичны в машинном представлении, нужны они только для проверки на логические ошибки...
1
26.05.2012, 13:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 13:48

Регистр сведений «Списанные материалы из эксплуатации». Почему регистр сведений, а не регистр накопления?
Существует Регистр сведений «Списанные материалы из эксплуатации». Регистр...

Товарисчи объясните пожалуйста как сделать данную задачу! (Найти наибольший элемент каждой строки А(4,6) и записать их в массив Y)
Найти наибольший элемент каждой строки А(4,6) и записать их в массив Y. С...

Перевести символьный массив в верхний регистр
Всем привет, подскажите по какой причине не возвращает в верхнем регистре, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru