Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2008, 13:05   #1
format
 
Регистрация: 31.08.2007
Сообщений: 8
По умолчанию struct vs MASM

Возникли проблемы во время работы со структурами в MASM.

Код:
.model small
task STRUCT
 day   dw 0
 mon   dw 0
 hour  dw 0
 min   dw 0
 stype dw 0 
 slen  dw 0  
 text  db 80 dup(" ") 
task ends 
...
.data
tasks task 20 dup ({,,,,,})
...
.code
mov bx,offset tasks
call readDay ;две процедурки для считывая в ах чисел
mov [bx].day,ax
call readMon
mov [bx].mon,ax
Во время ассемблинга выдаёт мол day и mon неопределены,
но если написать tasks.day, то всё отлично. Если бы была одна структура, то и не спрашивал бы, а тут массив нужен...

Вот нарыл, можно вроде бы так: mov tasks[si].day,ax
Но тогда si например будет играть роль индекса? то есть сперва он будет 0, затем надо будет каждый раз увеличивать на длину структуры? если память не изменяет её можно получить через type task

Последний раз редактировалось format; 03.05.2008 в 13:37.
format вне форума Ответить с цитированием
Старый 04.05.2008, 00:02   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
можно вроде бы так: mov tasks[si].day,ax
А у меня чего-то не работает

Есть такой вариант:
Код:
.model flat
......
......
.data?
mass_str	task 10 dup (<?>)
....
....
.code
mov	esi, offset [mass_str] ; - к первому элементу массива
mov	dx, [esi].task.mon

mov	esi, offset [mass_str]
add	esi, (SIZEOF task)*3 ;  - к третьему элементу
mov	dx, [esi].task.mon
Кстати, совсем неважно какой будет индексный регистр, можно
хоть eax взять..
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 04.05.2008 в 00:04.
Ulex вне форума Ответить с цитированием
Старый 04.05.2008, 00:20   #3
format
 
Регистрация: 31.08.2007
Сообщений: 8
По умолчанию

Вооо!
Спасибо
format вне форума Ответить с цитированием
Старый 09.05.2008, 17:32   #4
format
 
Регистрация: 31.08.2007
Сообщений: 8
По умолчанию

Так, дошёл до момента в работе, когда нужно по желанию пользователя удалить содержимое 1 структуры из массива. Как вариант вижу только смещение всего что "правее" таким образом, чтобы затёрлась нужная структура.
А есть ли другие варианты? Может быть операции предусмотрены специальные или MASMовские директивы?

P.S. С Праздником!
format вне форума Ответить с цитированием
Старый 09.05.2008, 17:54   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Насчёт специальных команд и операций не в курсе.
А я бы сделал динамически (захочется ведь и добавлять структуры в массив, а статический массив не резиновый):
1- модель .flat
2- массив структур определяем динамически (WIN API GlobalAlloc, GlobalLock, GlobalUnlock, GlobalFree), т.е понадобятся всего две переменные Handle памяти и Указатель на память
3- По старту инициализируем необходимый кусок памяти и заполняем его (если это нужно).
4- Если надо Удалить/добавить ещё одну или N структур - инициализируем новый кусок памяти необходимого размера и копируем в него содержимое исходного куска +/- данные новых структур (для копирования можно использовать строковые команды процессора)
5- После копирования удаляем "старый" кусок памяти (GlobalUnlock, GlobalFree).
6 - при выходе из приложения чистим память (GlobalUnlock, GlobalFree).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем отличается Tasm от Masm veter_s_morya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 21.07.2008 16:55
А где взять MASM RomanIgorevi4 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 06.07.2008 13:04
директивы в MASM - INVOKE, PROTO, LOCAL fermat_c Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.04.2008 18:25
MASM.exe помогите пожалуйста с запуском FlyingRat Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 03.05.2007 20:06
где есть masm 64бит ? rpy3uH Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 11.01.2007 14:19