Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с двумерными массивами ? 
:(
    Опции темы
DelMadman
Дата 25.2.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



как обращатся к элементам одномерного массива знаю, а как двумерного не знаю, хелп !
напишите пару строк типо : a[2,6] = 12, a[1,7] = 18, размером DD
PM MAIL   Вверх
Akina
Дата 25.2.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Вариантов два:

1) пересчитывать двумерный адрес в линейный (компактность)
2) хранить массив баз строк (скорость)


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DelMadman
Дата 26.2.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а можно примерчик небольшой, типо как я просил, я просто токо недавно начал
PM MAIL   Вверх
Akina
Дата 26.2.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Вар.1

Код

;Dim a(2,2)
a label word
dw ?,?,?
dw ?,?,?
dw ?,?,?

;ах=а(1,1)
mov ax,1 ; row
mov dx,3 ; cols per row
mul ax
add ax,1 ; col
shl ax,1 ; words
add ax,offset a
mov ax,ds:[ax]



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Doc_d0s
Дата 9.3.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

.model small
.stack 256h
.data    ;начало сегмента данных
n    dw    3
m    dw    3    
temp    db    0
mes_in      db 0ah, 0dh, 'Vvedi elementy matricy bez probelov i bez "enter": $';
mes_out     db 0ah, 0dh, 'Vvedena matrica: $'   
mes_eof    db 0ah, 0dh, 'eof$'
sdvig_str    db 0ah, 0dh, ' $'
probel    db '  $'
mat    db 3 dup (3 dup (?))    ;резервируем память под массив размером 3*3 ;байт    
_mat    db 3 dup (3 dup (?))    ;резервируем память под массив размером 3*3 
            
.code        ;начало сегмета кода
main:
    mov ax, @data                    ;связываем регистр ds  
        mov ds, ax        ;с сегметом данных через регистр ax 
        xor ax, ax    ;очищаем ax
        mov cx, 3    ;устанавливаем счетчик внешнего цикла (строки)
        xor bx, bx    ;bx == строки  == i
        xor si, si    ;si == столбцы == j
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, mes_in    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
external_in:
        push cx    ;в стек счетчик внешнего цикла
        mov cx, 3
        mov si, 0
internal_in:
        mov ah, 01h    ;запросим ввод с клавы
        int 21h    ;вызов прерывания ДОС     
        mov mat[bx][si], al    ;заносим в матрицу                       
        inc si    ;типа j++ :-)
        loop internal_in      
next_in:   
        pop cx    ;обновляем cx
        add bx, 3    ;смещение на новую строку 
        loop external_in    ;все сначала
;Вывод матрицы mat
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, mes_out    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС
        mov cx, 3    ;устанавливаем счетчик внешнего цикла (строки)
        xor bx, bx    ;bx == строки  == i
        xor si, si    ;si == столбцы == j
external_out:
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, sdvig_str    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
        push cx    ;в стек счетчик внешнего цикла
        mov cx, 3          
        mov si, 0
internal_out:
        mov ah, 02h    ;02h - вывод символа на экран
        mov dl, mat[bx][si]    ;загружаем выводимый символ
        int 21h          
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, probel    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
        inc si    ;типа j++ :-)
        loop internal_out
next_out:   
        pop cx    ;обновляем cx
        add bx, 3    ;смещение на новую строку 
        loop external_out    ;все сначала

;Заносим транспонированный вариант матрицы mat в  _mat
mov cx,m    ;заносим в сх значение м=3
xor si,si    ;обнуляем si
m1:
push cx    ;заносим сх в стек, чтобы не потерять значение
mov cx,n    ;заносим в сх n=3
xor di,di    ; обнуляем di
m2:
mov ax,n    ;заносим в ах n=3
mul si    ;умножаем ах на si
add ax,di    ;складываем ax и di, получаем смещение
mov bx,ax    ;переписываем значение ах в bx
mov al,mat[bx]    ;записываем значение элемента со смещением bx  ; в al
mov temp,al    ;запоминаем элемент
mov ax,m    ;заносим в ах m=3
mul di    ;умножаем ах на di
add ax,si    ;складываем ax и si, получаем смещение
mov bx,ax    ;переписываем значение ах в bx
mov al,temp    ;пишем в al из temp значение текущего эл-та ;матрицы
mov _mat[bx],al    ;пишем значение тек. Эл. «транспонированный ;массив»
inc di    ;инкремент di
loop m2    ;переход к метке m2
inc si    ;инкремент di
pop cx    ;достаем из стека cx
loop m1    ;переход к метке m1

;Вывод матрицы _mat

        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, mes_out    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС
        mov cx, 3    ;устанавливаем счетчик внешнего цикла (строки)
        xor bx, bx    ;bx == строки  == i
        xor si, si    ;si == столбцы == j
external:
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, sdvig_str    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
        push cx    ;в стек счетчик внешнего цикла
        mov cx, 3
        mov si, 0 
internal:
        mov ah, 02h    ;02h - вывод символа на экран
        mov dl, _mat[bx][si]    ;загружаем выводимый символ
        int 21h
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, probel    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
        inc si    ;типа j++ :-)
        loop internal
next:   
        pop cx    ;обновляем cx
        add bx, 3    ;смещение на новую строку 
        loop external    ;все сначала

exit: 
        mov ah, 09h    ;09h - вывод строки на экран
        lea dx, mes_eof    ;в dx копируем адрес mes
        int 21h    ;вызов прерывания ДОС 
        mov ax, 4c00h    ;стандартное 
        int 21h    ;завершение
end     main    ;программы
         



транспонирует матрицу

Это сообщение отредактировал(а) Doc_d0s - 9.3.2006, 16:15
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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