<<
>>

Двухмерные массивы

С представлением одномерных массивов в программе на ассемблере и организа- цией их обработки все достаточно просто. А как быть, если программа должна об- рабатывать двухмерный массив? Все проблемы возникают по-прежнему из-за того, что специальных средств для описания такого типа данных в ассемблере нет.
Двух- мерный массив нужно моделировать. На описании самих данных это почти никак не отражается — память под массив выделяется с помощью директив резервиро- вания и инициализации памяти. Непосредственно моделирование обработки мас- сива производится в сегменте кода, где программист, описывая алгоритм обработки на ассемблере, определяет, что некоторую область памяти необходимо трактовать как двухмерный массив. При этом вы вольны в выборе того, как понимать распо- ложение элементов двухмерного массива в памяти: по строкам или по столбцам. Если последовательность однотипных элементов в памяти трактуется как двух- мерный массив, расположенный по строкам, то адрес элемента (i,j) вычисляется по формуле .
(база + (количество_элементов_в_строке • i +j) • размер_элемента). Здесь i = О.,.п~ 1 — номер строки, аj = 0...m-l — номер столбца. Например, пусть имеется массив чисел (размером в 1 байт) mаs(i,j) с размерностью 4 • 4 (г = 0...3, 3): 23040567 05060799 67080923 87090008 В памяти элементы этого массива будут расположены в следующей последова- тельности: 23 04 05 67 05 06 07 99 67 08 09 23 87 09 00 08 Если мы хотим трактовать эту последовательность как двухмерный массив, приведенный раньше, и извлечь, например, элемент mаs(2, 3) = 23, то, проведя не- хитрый подсчет, убедимся в правильности наших рассуждений: Эффективный адрес mаs(2, 3) - mas + (4 • 2 + 3) • 1= mas + 22. Посмотрите на представление массива в памяти и убедитесь, что по этому сме- щению действительно находится нужный элемент массива.
Логично организовать адресацию двухмерного массива, используя рассмотрен- ную нами ранее базово-индексную адресацию. При этом возможны два основных варианта выбора компонентов для формирования эффективного адреса: * сочетание прямого адреса как базового компонента адреса и двух индексных регистров для хранения индексов: mov ах,таs[еbх] [еsi] Ш сочетание двух индексных регистров, один из которых является и базовым, и ин- дексным одновременно, а другой — только индексным: mov ах, [еbх] [еsi ] В программе это будет выглядеть примерно так:

Листинг 13.4. Поиск элемента в двухмерном массиве ;рrg_lЗ_4.asm МАSМ MODEL small STACK 256 .data

Анализируя работу программы, не забывайте, что при написании программ на языке ассемблера нумерацию элементов массива удобнее производить с 0. При поиске определенного элемента массив просматривается от начала и до конца. Программа сохраняет в поле foundtime количество вхождений искомого элемента в массив. В качестве индексных используются регистры SI и ВХ.

<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Двухмерные массивы:

  1. 18.5. Права и обязанности держателя (обладателя) по работе с массивами персональных данных
  2. 18.6. Государственное регулирование работы с персональными данными
  3. Частотный анализ и кодировка.
  4. 1.4. Цель настоящего учебника
  5. 18.7. Уполномоченный по правам субъектов персональных данных
  6. 3. "Концептуальный".
  7. 18.3. Правовые основы работы с персональными данными
  8. 18.2. Субъекты и объекты информационных правоотношений
  9. 18.4. Права субъекта персональных данных
  10. Статья 245. Уничтожение или повреждение объектов растительного мира