Добрый день. Пытаюсь перейти из MASM в FASM. Может в новом FASM - е что-то сменилось. Два вопроса. 1. Подскажите, пожалуйста как перевести эти структуры из MASM в FASM Код (Text): DNS_MX_DATA struct pNameExchange dword ? Preference word ? ad word ? DNS_MX_DATA ends ;--------------------------------------------- DNS_RECORD struct pNext dword ? pName dword ? wType word ? wDataLength word ? Flags dword ? MX1 DNS_MX_DATA <> MX2 DNS_MX_DATA <> MX3 DNS_MX_DATA <> MX4 DNS_MX_DATA <> MX5 DNS_MX_DATA <> DNS_RECORD ends 2. Как в FASM-е выполнить assume Код (Text): assume eax : ptr DNS_RECORD push [eax].MX2.pNameExchange Спасибо.
попробуй так: Код (Text): struct DNS_MX_DATA pNameExchange dd ? Preference dw ? ad dw ? ends ;--------------------------------------------- struct DNS_RECORD pNext dd ? pName dd ? wType dw ? wDataLength dw ? Flags dd ? MX1 DNS_MX_DATA <> MX2 DNS_MX_DATA <> MX3 DNS_MX_DATA <> MX4 DNS_MX_DATA <> MX5 DNS_MX_DATA <> ends
include 'masm.inc' В результате различия минимальны: не пишешь <> и не знаю, нужно ли писать ptr в assume. А так, на фасме assume будет выглядеть так: Код (Text): virtual at eax .dns DNS_RECORD end virtual push [.dns.MX2.pNameExchange]
И еще вопрос Вот в MASM мы берем аргумент командной строки Код (Text): invoke GetCL,1,ADDR sHostName ; возьмем первый аргумент командной строки .if eax != 1 ; если нет ни одного аргумента выход ; начинаем работать ; вывод сообщения о привилах использования invoke StdOut,ADDR error1 invoke StdOut,ADDR lf ret .endif А как это в FASM - попроще делается?
смотря как объявленны sHostName, error1, lf... в принцепе в самомпростом случае достаточно убрать ADDR и подключить макросы поддержки if
Freeman Как вот в Fasm - е этот ( invoke GetCL ... ) реализовать. Или как в Fasm - е взять указатель на заданный аргумент ком. строки?
Freeman нехорошо смеяться в разделе BEGINNERS IceStudent Дак не хочет это собрать Код (Text): format PE GUI 4.0 ; Создаем PE EXE entry start ; Точка входа - start include 'c:\fasmw\include\win32a.inc' include 'c:\fasmw\include\macro\masm.inc' ; для assume section '.data' data readable writeable executable ; Секция данных и кода sHostName db 256 dup(0) section '.code' code readable writeable executable ; Секция данных и кода ;---------------------------------------------------------------------------------------- start: ; Точка входа в программу invoke GetCL,1,sHostName ; возьмем первый аргумент командной строки cmp eax, 1 ; если нет ни одного аргумента выход je _m1 ; начинаем работать ret ; вывод сообщения о привилах использования _m1: ret section '.idata' import data readable writeable ; Секция импорта library kernel32,'KERNEL32.DLL' include 'C:\fasmw\INCLUDE\APIA\kernel32.inc' такое пишет Код (Text): C:\_temp>c:\fasmw\fasm.exe C:\_temp\getCL_.asm flat assembler version 1.67.8 (1212220 kilobytes memory) C:\_temp\getCL_.asm [14]: invoke GetCL,1,sHostName c:\fasmw\include\macro/proc32.inc [20] invoke [6]: call [proc] } error: undefined symbol. C:\_temp>pause
_sheva740 Так ведь ты пытаешься вызвать подпрограмму из другого модуля. Либо включай сорец того модуля в фасмовый, либо делай последний как format ms coff для сборки obj'a и чей-нить линкер для сборки obj'a и masm32.lib. И вообще — зачем тебе фасм, не проще ли на масме писать?
IceStudent да, если чесно, несколько процедур нашел писанными на fasm-е, хотел собрать старое и новое в кучу и поиграться. Большенство в суммарном, нарытом в инете, коде было на fasm - e. Других причин нет.