Сейчас на форуме: asfa, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Цикл по структуре
Посл.ответ Сообщение

Ранг: 5.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 15 августа 2012 19:32 · Поправил: opcodes
· Личное сообщение · #1

Доброе время дня и ночи..

Вопрос следующий назрел.. вот к примеру есть у меня структура, которая содержит N-е кол-во полей. т.е
-------------------------------
name struct
полеРаз тип ?
полеДва тип ?
и т.д
name ends
--------------------------------

Как мне в цикле пройтись по всем значениям в этой структуре(чтобы не обращаться к каждому элементу напрямую по названию поля т.к чтобы мне не пришлось много букав писать)? Существуют ли какие индексы? макросы? я незнаю даже что еще можно придумать..
Компилятор Masm.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 15 августа 2012 19:52 · Поправил: OnLyOnE
· Личное сообщение · #2

размерность поля важно
к примеру если размер поля dword == 4 байта

Code:
  1.  
  2. name struct
  3. полеРаз тип ?
  4. полеДва тип ?
  5. и т.д
  6. name ends
  7.  
  8.  
  9. .data
  10.  
  11. name_s name <>
  12. Buffer db sizeof name_s dup(0)
  13.  
  14. .code
  15. mov ecx, sizeof name_s
  16. lea esi,name_s
  17. lea edi,Buffer
  18. @@: 
  19. lodsd
  20. stosd
  21. loop @B
  22.  


Это на скорую руку .. цикл переписывания по из структуры в буфер dword-ами.
А вообще, что ты подразумеваешь под "в цикле пройтись"?
Конкретнее, что надо сделать?
И получишь конкретный ответ..

-----
aLL rIGHTS rEVERSED!


| Сообщение посчитали полезным: opcodes

Ранг: 5.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 15 августа 2012 21:02 · Поправил: opcodes
· Личное сообщение · #3

del



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 15 августа 2012 21:32
· Личное сообщение · #4

Правильно заданный вопрос содержит в себе половину ответа. Проспись, и почитай справку к масму, такое спокойно реализуемо не через struct, а через скрипт.

| Сообщение посчитали полезным: plutos

Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 16 августа 2012 00:21 · Поправил: Rockphorr
· Личное сообщение · #5

opcodes
я в перловку не потребляю, но по твоему описанию могу тебе посоветовать
делаешь структуру в которой все поля адреса строк
ну и на основании этого мутишь цикл


полеодын dword offset(хня)


хня byte "как то так",0


механизмы конвертации строк во что либо на твоей совести




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 16 августа 2012 01:05 · Поправил: plutos
· Личное сообщение · #6

opcodes
знаете? пока я расписывал сюда целую петицию. я в какойто момент усомнился, в том чего именно я хочу. и удалил все нахрин. думаю это из за плохого сна, в последнее время. Ну да ладно, милые друзья, не печальтесь. завтра я с новыми силами попробую объяснить все заного(maybe). но пока можете попробовать себя в роли телепатов. я только за. благодарю за внимание. а ниже остался малый отрывок того, что я хотел сказать, если сможете, то попробуйте меня понять по нему. баста!

Ты, друг, все же пойми, что тут ТЕХНИЧЕСКИЙ ФОРУМ, а не форум клоунов. Читать все твои "забавные" изложения и описания твоего внутреннего мира и личной жизни ни у кого нет ни времени, ни желания.
Имеешь вопрос - попробуй хоть что-то найти сам. А не можешь найти - обдумай, сформулируй грамотно и задай.
(Кстати, порой в процессе обдумывания вдруг приходит решение и вопрос отпадает...)
А все свои кривляния можешь просто "удалил все нахрин"!

PS
Странно, ты хоть в школу ходил? Или закончил экстерном? Типа "home schooling"?
Во втором классе учат, что частица "не" пишется ОТДЕЛЬНО от глагола, а слово "чесТно" пишется с буквой "Т", поскольку это наречие, образованое от существительного "честь".
Про знаки препинания (запятые там всякие) я уже просто молчу... Это уже будет как высшая математика.

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: Vovan666

Ранг: 5.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 16 августа 2012 04:24 · Поправил: opcodes
· Личное сообщение · #7

Vovan666, непонял чесно говоря какой скрипт. там этих пунктов сотни в хелпе.
Rockphor, нет, не то
plutos, ok.

Вроде бы вопрос такой банально легкий.. легче этого вопроса я тут не задавал наверно.
Где тут не понятные строки?

Name struct
поле1 тип ?
поле2 тип ?
поле3 тип ?
Name ends

1. узнать число полей в структуре(програмно т.е не считать самому чтобы)
2. создать цикл, с кол-вом итераций равным кол-ву полей.
3. lea eax, [name_s].поле1 - т.е поместить начало адреса, где начинается значение.
4. mov ebx, type [name_s].поле1 - узнать размер поля из структуры.
5. вызвать WriteConsoleA, hwnd, eax, ebx, NULL, NULL
6. profit.
И чтобы он мне вывел ЗНАЧЕНИЕ каждого поля структуры в цикле. Вот конкретное Т3.
В данном случае меня интерисует первый пункт, как программно узнать сколько существует полей в структуре?(т.е не считая самому их)



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 16 августа 2012 10:35 · Поправил: Rockphorr
· Личное сообщение · #8

opcodes нет в масме таких высокоуровневых рюшечек - городи что хошь сам
структура это просто условное разбиение последовательности байт на группы - в коде никаких структур нету - есть только байты слова двойные слова и тд
ближайший путь реализовать такую кухню - через указатели с терминатором в конце

| Сообщение посчитали полезным: opcodes

Ранг: 5.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 16 августа 2012 10:55 · Поправил: opcodes
· Личное сообщение · #9

короче я понял посоны.. это полная в таком случае.
Спасибо Rockphorr, и Всем остальным. Будем копать дальше

P.S Plutos, ходил. и щас хожу это в классе я стараюсь писать грамотно. в инете же, пишу как мне удобно.
ты то уже смотрю давно понял, пёс, что это технический форум. опираясь на твой опыт и я пойму


 eXeL@B —› Вопросы новичков —› Цикл по структуре
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати