Zloy Code: proc test__ arg stdcall [MessageBox],0,[arg],0,0 ret endp Насколько я понял, в основном, идут проблемы с синтаксисом... Вот тебе пара основных мануалов http://dump.ru/files/h/h8318788728/ http://dump.ru/files/h/h45448514/ Краткий экскурс так сказать
2 ZloY - на фасме все просто. я вот так вот язаю функции: Code: proc MyFUNC param1,param2 .-.-.-.-.-.-.-.-.-.-.- ret endp Как повелось в винде то функция возвращает значение через регистр eax. поэтому результат выполнения пихаешь туда и всё будет ок. А вызывать эту функцию: stdcall MyFUNC,eax,buf_2
Zloy Выбери себе книгу http://forum.antichat.ru/thread31398.html и прогони её по быстрому и будет счастье! Типы данных, циклы, массивы и т.д. ты все это знаешь, а дело за синтаксисом
Asm При линковке в TLINK32, вы[одит следующая ошибка C:\>tlink32 HELLO1.obj Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International Error: Unresolved external 'MESSAGEBOXA' referenced from module HELLO1.ASM Error: Unresolved external 'EXITPROCESS' referenced from module HELLO1.ASM как исправить? ))
а почему не актуален? С масм32 попробовал компилить, и тоже самое ошибка ( hello.obj : warning LNK4033: converting object format from OMF to COFF hello.obj : error LNK2001: unresolved external symbol ExitProcess hello.obj : error LNK2001: unresolved external symbol MessageBoxA LINK : error LNK2001: unresolved external symbol _mainCRTStartup hello.exe : fatal error LNK1120: 3 unresolved externals Дайте плз ктонибудь Hello World, на масм 9.0
ты исходник выкладывай. Разработка прекращена очень давно, сейчас им почти не пользуются. Наиболее перспективный сейчас fasm.
Хочу прочитать данные реестра (MASM32 v 8.2), но в итоге получаю Win32 ошибку где ошибка? Code: .386 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\advapi32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\advapi32.lib includelib \masm32\lib\user32.lib .data SubKey db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" vName db "DataLayer" rt dd 1 rc dd 127 mbCapt db "RegValue",0 .data? key db ? buf db ? .code start: invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, SubKey, 0, KEY_ALL_ACCESS, key invoke RegQueryValueEx, key, vName, NULL, addr rt, addr buf, addr rc invoke RegCloseKey, key invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK invoke ExitProcess, 0 end start
z01b, Code: .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data MsgBoxCaption db "Antichat",0 MsgBoxText db "Hello World!",0 .code start: invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL end start
t04 > Лови: Code: .386 .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\advapi32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\advapi32.lib includelib \masm32\lib\user32.lib .data? key dd ? buf db 1024 dup (?) .data SubKey db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0 vName db "DataLayer",0 mbCapt db "RegValue",0 rt dd REG_SZ bsz dd sizeof buf .code start: invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr SubKey, 0, KEY_QUERY_VALUE, addr key invoke RegQueryValueEx, key, addr vName, 0, addr rt, addr buf, addr bsz invoke RegCloseKey, key invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK invoke ExitProcess, 0 end start
1 На Delphi есть функция - ParamStr, она возвращает параметры командной строки, типа ParamStr(0) это полный адрес программы, ParamStr(1) это первый параметр и т.д. Есть ли аналог на МАСМ32? 2 Как на МАСМ32 юзать массивы? Например запустить цикл типа Code: for i := n to m do WriteLn(A[i]) если не трудно то приведите Plz примеры
t04, в теме есть пример работы с аргументами командной строки на фасме, но на масм не проблема перевести. http://forum.antichat.ru/thread28998.html Массивы: Code: size equ 20 .data? numb WORD size dup(?) ; область памяти для 20 идущих подряд WORD .code start: mov ecx, size ; для цикла mov bx, 1 xor edi, edi ; обнуляем edi next: mov numb[edi], bx inc bx add edi, 2 ; к следующему числу(word - 2 байта) loop next invoke ExitProcess, 0 end start Регистр edi хранит адрес слова, полученный относительно начала массива, значит само слово будет выглядеть как numb[edi]. При edi равном нулю, mov numb[edi], bx запишет содержимое bx в нулевое слово массива. Надеюсь принцип понятен.
Народ, вот прочитал значение реестра в массив, а как можно узнать присутствие в нем определенной строки? или как массив в строку переделать, а потом сравнить? нужно типа следующего: Code: if Pos(subStr,Str) then WriteLn(SubStr+' присутствеут в '+Str) else WriteLn(SubStr+' отсутствеут в '+Str); нашел такое: Code: cmp buf,'SubString' je label1;или как я понял можно и jz label1: invoke MessageBox, NULL, addr buf, addr Prisutstvuet, MB_OK label2: invoke MessageBox, NULL, addr buf, addr Otsutstvuet, MB_OK но не разобрался как с этим работать ЗЫ нужно что бы учитывало реестр символов.