|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 8, 2004 17:45:12 ...нда... тогда получается список Auto-Complete должен содержать и метки тоже? Балаган получается. Нет логики. Если я завершаю инструкцию Jxxx - мне нужны только метки. Если я завершаю инструкцию CALL/INVOKE - мне нужны только процедуры. Сделаю так: генератор кода будет делать процедуру как положено, чтобы отличить от метки, так что если кто-то будет писать процедуру как метку - руками, то тогда оне просто не попадёт в список Auto-Complete. Понимаю, что плохо, а что делать?.. Хотя в список для Auto-Complete-By-Prefix попадает всё, в список для CALL такая метка-процедура не попадёт. |
|
|
Дата: Апр 8, 2004 18:14:50 а что если: метки - локальные, процедуры - глобальные (только в разных ассемблерах это по разном), но это уже вариант. Допустим такое объявление: main: .... метка глобальная, значит процедура, а вот такое .exit: ; FASM @exit: ; MASM & TASM .... а это уже метка локальная, значит это просто метка (хотя есть ещё деректива local ...). Вобщем идею подкинул, дальше сам думай:) |
|
|
Дата: Апр 8, 2004 18:27:15 AsmGuru62 Ещё может что поменяется, например сговорились теперь использовать в конце обычной процедуры слово endp ;-) Cтарые исходники приходится переделывать :-) |
|
|
Дата: Апр 8, 2004 18:39:28 В конце мало поможет, парсеру надо бы в начале что-то. В принципе, можно сделать макро для такой цели:
macro method clsname, verb {
clsname#verb:
}
Тогда такой код уже лучше поддаётся парсеру: method THeap, Allocate ... ret |
|
|
Дата: Апр 10, 2004 22:41:43 S_T_A_S_ Работает не только "MOV [.local],reg" но и "PUSH [.local]"/"POP [.local2]" причем если локальные переменные написать в качестве аргументов INVOKE - тоже. Т.е. корректно вычисляются смещения [ESP+XX+YY] Единственное ограничение - если используются локальные структуры, надо писать "%s+" перед именем :( А в MASM такое никак не сделать. Используется подсчет кол-ва затолканых/вытыщенных DWORD'ов в стек при PUSH/ POP/INVOKE/stdcall. Наверняка в masm такое тоже возможно, теоретически ведь можно написать свой процедурный макрос по типу fasm'овского invoke/stdcall пусть он будет называться, например, xinvoke, и от него уже плясать... |
|
|
Дата: Апр 10, 2004 23:07:02 Asterix А как обеспечить, например, проверку кол-ва параметров в нем? И к тому же не нравятся мне куча разных имен Я писал свой вариант COinvoke в MASM - существующий меня не устраивал.. На FASM это "несколько проще" imho А вот пример с unicode конверсией используя файл-табличку, как сделать на MASM? А структуры, у которых поля - не только DWORD/BYTE, а хоть что, скажем CALL?? А директива FILE, включающая любой файл в генерируемый exe.. |
|
|
Дата: Апр 15, 2004 20:02:11 Правка Asterix А никак, я глянул на сорсы fasm'а - так и есть ничем не отличается от метки.. Неправда! Отличается: те метки, которые используются для вызова подпрограмм через call не имеют отступа, а обычные, локальные — те, как правило, записаны с отступом на уровне остального кода. Есть, конечно, исключения, но их всего пару штук на все исходники FASM'a… |
|
|
Дата: Апр 15, 2004 22:38:04 Код должен быть удобочитаем. Отступы не подходят для хорошей читаемости... А чем не нравится макро для обозначения процедуры? |
|
|
Дата: Апр 19, 2004 10:54:24 IceStudent Эти отличия не принципиальные, т.е. отступы можно не делать, код от этого нерабочим не станет ;-) |
|
|
Дата: Апр 21, 2004 08:35:43 Вот чего мне не хватает в фасме и о чем я жалею, так это передача в процедуру параметров разного роста. Совсем недавно мне понадобилось передать в процедуру байт. А делать пришлось через дворд... Т.е. передать байт получилось, но принимается он как дворд.. Это не гут! Чтобы не быть голословным, вот пример: Вот так в фасме:
stdcall MyProc, 'A'
...
proc MyProc, Char
mov eax,[Char] ; а я хочу movzx eax,[Char] - так более логично :)
ret
в Масме все было проще:
MyProc proc Char:byte
Хотя, может быть это будет не самый оптимальный метод, но это дело принципа - в масме это БЫЛО! %) |
|
|
Дата: Апр 21, 2004 12:28:51 n0p movzx eax,byte [Char] |
|
|
Дата: Апр 21, 2004 13:14:50 Black_mirror Хе-хе.. Так ведь я не о том! Я о принципе! :) Ведь в стек можно запихать байт и выдернуть байт обратно можно. Вот я и хочу этого добиться от фасма при передаче параметров. Но как? Не надо предлагать мне писать макрос - у меня не так много свободного времени, чтобы разбираться с макросами.. |
|
|
Дата: Апр 21, 2004 13:58:42 · Поправил: S_T_A_S_ [ n0p : Не надо предлагать мне писать макрос - у меня не так много свободного времени, чтобы разбираться с макросами.. ] Можете воспользоваться, например, моими
Пока сыроваты, правда.. Ведь в стек можно запихать байт и выдернуть байт обратно можно. imho - можно, но нельзя. Стек должен быть dword aligned |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.088 |