|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 24, 2003 18:22:17 · Поправил: KiNDeR Есть структуры LACTCH struc lDay dw ? lMonth dw ? lYear dw ? LACTCH ends SOTRUDNIK struc bFIO db 30 dup(?) wSTAWKA dw ? lch LACTCH <> SOTRUDNIK ends создаем массив sname SOTRUDNIK 10 dup(<>) Вопрос: Как, обратиться к i`му элементу массива? |
|
|
Дата: Июл 24, 2003 18:29:59 KiNDeR Да как угодно mov eax,offset sname mov ecx,(SOTRUDNIK ptr [eax+i*size(SOTRUDNIK)]).член структуры Это MASM |
|
|
Дата: Июл 24, 2003 18:32:35 KiNDeR Скажите а по логике разве это чем то отличается от обращения к массиву dd например? Тоже самое.. |
|
|
Дата: Июл 24, 2003 22:20:22mov eax,OFFSET [sname + i*38] ASSUME eax:PTR SOTRUDNIK mov cx,[eax].wSTAWKA mov [eax].wSTAWKA,dx ASSUME eax:NOTHING |
|
|
Дата: Июл 24, 2003 23:19:40 наверно я сделаю так: mov ebx,I mov ax,[sname+ebx*38].wSTAWKA mov esi, offset s_name mov edi,offset [sname+ebx*38].bFIO mov ecx,length(s_name) rep movsb Edmond, Quantum благодарю вас. З.Ы. Оказывается, когда немного подумаешь, не так уж все и сложно... :) |
|
|
Дата: Июл 24, 2003 23:21:34 А как на счет что нибудь с SSE написать????? Просто интересно!!! |
|
|
Дата: Июл 25, 2003 03:44:37 · Поправил: KiNDeR [Удалено] |
|
|
Дата: Июл 26, 2003 19:40:56 · Поправил: Four-Fmov ecx,(SOTRUDNIK ptr [eax+i*size(SOTRUDNIK)]).член структурыНе будет такое работать. i*XXX - нельзя. size(SOTRUDNIK) - только если он равен 1, 2, 4 или 8. mov eax,OFFSET [sname + i*38]Тоже не будет работать, по тем же причинам. mov ax,[sname+ebx*38].wSTAWKAСработает только если вместо 38 будет 1, 2, 4 или 8. [ KiNDeR: Как, обратиться к i`му элементу массива? ] В данном случае простого и универсального решения, IMHO, нет. В любом случае, придется пихать смещения в регистры и манипулировать ими, в зависимости от размеров членов структур. |
|
|
Дата: Июл 26, 2003 20:42:07 mov eax,OFFSET [sname + i*38] Тоже не будет работать, по тем же причинам. А кто сказал что i является reg32/mem32? i*38 нужно заменить на 0,38,76 и т.д. |
|
|
Дата: Июл 27, 2003 08:16:52 · Поправил: KiNDeR Я это уже все испробывал, ни.... не работает, пришлось изобретать велосипед. Для работы со строками один способ, для работы с элементами структуры размером в слово/двойное слово - другой. наиболее универсальный способ это: mov edi,offset sname.wSTAVKA
mov eax, size SOTRUDNIK
mov ebx,I ; элемент массива
mul ebx
add edi,eax
mov ecx,[edi] |
|
|
Дата: Июл 27, 2003 23:37:49 Насколько я понимаю размер массива заранее не известен? Если так то нужно хранить адрес начала памяти выделенной процедурой типа GlobalAlloc адрес начала последней структуры которую можно будет записать в выделенную область, и адрес следующей после последней записанной структуры. В любом случае представлять всё это дело проще в TreeView и ListView. В TreeView например подразделения предприятия (насколько я понял прога должна вести, что то типа своей базы данных по сотрудникам) В ListView все сотрудники выделенного в TreeView подразделения, тогда в качестве параметра lParam передаваемого ListView в структуре LVI можно передавать адрес памяти структуры соответствующего сотрудника. При щелчке на интересующем сотруднике легко и просто получаем доступ к информации о леньтяе/стахановце. Так же в структуре можно предусмотреть четырёх байтовое поле под хендл соответствующего итема TreeView, тогда поиск нужно будет проводить не по строкам с названием подразделения, а по хендлу соответствующего итема в TreeView. |
|
|
Дата: Июл 28, 2003 06:04:46 pas Насколько я понимаю размер массива заранее не известен? Вообще да. Но можно сделать фиксированную длинну скажем 10 элементов. А где нибудь на реализацию этого метода можно взглянуть? Интересный подход. |
|
|
Дата: Июл 28, 2003 09:52:15 KiNDeR В исходниках программа каталогизатор CD Она вроде с главной страницы видна, а так в разделе утилиты кажется. Если понадобится объяснение пиши. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |