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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: адресация двумерных массивов в ФАСМе( достало(  (Прочитано 18069 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
dark_rain
Помогающий

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

« : 01-04-2008 11:03 » new

и так, у меня есть заданный массив который мне помог задать один умный чел) за это ему спасибо, такое дело:
format pe
jmp start
dim_x equ 5
dim_y equ 5
arr db dim_x*dim_y dup 0
и так теперь вопрос... как мне обратится к элементу массива для того что бы запихнуть его в регистр al к примеру? с одномерными разобрался... а как тут? каким способом адресации?
Записан
Sla
Команда клуба

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

WWW
« Ответ #1 : 01-04-2008 11:32 » 

а что тебе писал "один умный чел) которому за это ему спасибо",
как вычисляется индекс текущего элемента массива

смотри сюда
db 00, 01, 02, 03,     00, 01, 02, 03,     00, 01, 02, 03,     00, 01, 02, 03
это я описал двумерный массив 3х3
и подобное ты уже видел

как добираться к нужному элементу?
твоя задача посчитать смещение к нужному элементу

способ адресации тот же что и с одномерными массивами

upd
возьми в руки карандаш и бумагу
« Последнее редактирование: 01-04-2008 11:51 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
dark_rain
Помогающий

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

« Ответ #2 : 01-04-2008 12:08 » 

да) ты тож умный человек) я не спорю... но смотри что бы обратится к 2 элементу в 1 строке то я пишу arr+2*1 а если ко второму элементу во 2 строке то я пишу arr+2*2...  я имею ввиду что то самое +2 указывает положение погоризонтали а *2 указывает положение повертикали попросту говоря?
Записан
Sla
Команда клуба

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

WWW
« Ответ #3 : 01-04-2008 12:19 » 

dark_rain, извини, а теперь тоже самое но! словами
именно так как тебе показал тот умный человек

зы не потому что я злой, а потому чтобы ты сам понял
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
dark_rain
Помогающий

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

« Ответ #4 : 01-04-2008 12:26 » 

не) я без претензий) так лучше даже) лень эт не круто)
Записан
Sla
Команда клуба

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

WWW
« Ответ #5 : 01-04-2008 13:04 » 

dark_rain, а если у тебя zerobased массив? как твоя формула работать будет?
а если размер элемента массива больше чем один байт - как твоя формула работать будет?

бери бумагу и карандаш
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

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

WWW
« Ответ #6 : 01-04-2008 13:17 » 

т.е. ты должен получить что-то типа этого


* 124.jpg (3.61 Кб - загружено 2140 раз.)
« Последнее редактирование: 01-04-2008 13:29 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 01-04-2008 17:12 » 

смотри сюда
db 00, 01, 02, 03,     00, 01, 02, 03,     00, 01, 02, 03,     00, 01, 02, 03
это я описал двумерный массив 3х3

Слава! Запутаешь парня - ты показываешь массив 4*4 Улыбаюсь


dark_rain,

общая формула для доступа к элементу одномерного массива будет
Код:
arr[xi_zb]

двумерного массива будет
Код:
arr[dim_x*yi_zb + xi_zb]

трёхмерного
Код:
arr[dim_x*dim_y*z_zb+dim_x*yi_zb + xi_zb]


если на пальцах - у координаты, которая "изменяется быстрее" при "единичном сдвиге" в массиве - у той меньше множителей, а множители "долгих" координат - это размерности всех , "быстрее" их.
В общем - правда на бумаге нарисуй и всё поймётся сразу

Код:
;запихиваем arr[yi_zb][xi_zb]  в al

mov ebx,0
mov al,byte ptr yi_zb
mul dim_x ;ax==dim_x*yi_zb
mov bx,ax
add bx,xi_zb
mov al, arr[ebx]

тут я в коде скорее всего нерационально сделал (слишком мало опыта) - тебе оптимизировать ))
« Последнее редактирование: 01-04-2008 17:50 от Алексей1153++ » Записан

dark_rain
Помогающий

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

« Ответ #8 : 23-04-2008 17:09 » 

Пасиба всем вам))) я все атлична понял))) пописАл, посмотрел рез в отладчике)) все жесть)))пасиба еще раз))) у вас оч дельный форум))) только одно пугает что мой препод по сис программированию мя спалит тут))) да ну и то)) мужик он нормальныйпо этому думаю ниче не сделает мне))) Ы
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #9 : 24-04-2008 03:20 » 

dark_rain, ник препода в студию Улыбаюсь
Записан

Странно всё это....
dark_rain
Помогающий

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

« Ответ #10 : 17-07-2008 12:24 » 

аааааа))) он такая рыба что у нео не выпросиш где он зареген а где нет)))) Его зовут Савченко Владимир Николаевич) преподает в Украинской инженерно педагогической академии в городе харькове) отличный чувак) требует конечно очень, и строгий, но преподает он очень круто) я вот полный дупль был в фасме а благодаря форуму нашему и ему хоть че та понимать начал))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines