Можно ли поставить метку в структуре в MASM'е? Например есть структура: my struc musor1 dd ? my_str db 10 dup (?) my_str_end = $ - offset my musor2 dd ? my ends Можно ли как-нибудь прописать my_str_end так, чтобы доступ к нему был как к "my.my_str_end"? "my_str_end equ musor2" не нравится!
Gennadiy_M, Код (Text): ;my struc musor1 = 0 my_str = 4 my_str_end = 10+4 musor2 = 10+4 ;my ends в итоге: my_str_end = musor2 о каком резервировании речь?
Мне было бы удобней так: my struc musor1 dd ? my_str db 10 dup (?) my_str_end: musor2 dd ? my ends Нет, так нет. Просто при программировании частенько структура сильно меняется. Получается, чтобы определить смещение конца my_str мне надо ссылаться на следущестоящий элемент (а если его нет?). Можно конечно и "my_str_end = $", но мне нужно, чтобы доступ к смещению был как "my.my_str_end". Всё это для культуры программирования и если нет простого решения, то буду как раньше.
эм,вставлю свои 5 копеек никаких меток ненадо если уж так припекло,то обьяви структуру так - Код (Text): my struc musor1 dd ? my_str db 10 dup (?) strend db 1;это какбы вместо метки musor2 dd ? my ends потом Код (Text): lea esi,my.strend;получаем указатель на следующий элемент структуры dec esi (вместо esi используй любой нужный тебе регистр.именно НУЖНЫЙ) потом можно будет обращатся к этому элементу из регистра esi,например Код (Text): mov eax,'1' mov [esi],eax таким образом в конец строки будет перемещён символ '1' это было во первых --------------------------------------------------------------------- во вторых....зачем так извращённо,когда можно просто Код (Text): lea esi,my.my_str;получаем указатель на начало строки(т.е. на нулевой элемент массива байт) add esi,10;добавляем 10 и получаем указатель на конец строки(т.е. на десятый элемент массива байт) потом можно будет обращатся к этому элементу из регистра esi,например Код (Text): mov eax,'1' mov [esi],eax таким образом в конец строки будет перемещён символ '1' --------------------------------------------------------------------- в третьих.если не устраивают варианты выше ,то Код (Text): lea esi,[my.strend-1] (опять таки,обращение через регистр.если регистры заняты,"перебрось" значение какоголибо выбранного тобой регистра через стёк(т.е. push esi <потом код> pop esi)
забыл добавить - если строки предназначаются для функций winapi,то лучше присобачь ещё нулевое окончание
Человек борется за культуру, а ты предлагаешь еще большее извращение. Вот как надо : Код (Text): my_str_end db 0 dup (?) Элементарно, работает и не резервирует. Правда это стоило мне час секса с MASM32. Пока не задал имена структуры большими буквами не работало... Хрень какая-то :-(