· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Чем плох MASM32?

<< . 1 . 2 . 3 . 4 .

Посл.отвђт Сообщен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

<< . 1 . 2 . 3 . 4 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.088