так ничего и не удалось разобрать самому. могу разве что сослаться но постоянную смену редакторов ресурсов каждым из которых двигала мания величия в виде вставки своих копирайтов в коментах и юзанием хз каких библиотек. вообщем на данный момент остановился на ResEd. поскольку у мене не получилось самому то остается один очень надежный вариант. ткните меня носом в правильны ответ. вот полный текст и программы и ресурсов. Code: .386 .model flat,stdcall option casemap:none DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data ;DlgName db "MyDialog",0 AppName db "First",0 .data? hInstance HINSTANCE ? .const IDM_EXIT equ 32003 IDD_DLG2 equ 1000 IDC_RED1 equ 1001 .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam, hInstance, IDD_DLG2, NULL, ADDR DlgProc, NULL invoke ExitProcess,eax DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_INITDIALOG invoke GetDlgItem, hWnd, IDC_RED1 invoke SetFocus,eax .ELSEIF uMsg==WM_CLOSE invoke SendMessage, hWnd, WM_COMMAND, IDM_EXIT, 0 .ENDIF mov eax,TRUE ret DlgProc endp end start Code: #define IDD_DLG2 1000 #define IDC_RED1 1001 IDD_DLG2 DIALOGEX 5,5,65,13 CAPTION "IDD_DLG" FONT 10,"MS Sans Serif",400,0,204 STYLE 0x10CF0000 BEGIN CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63,11,0x00000200 END
Сразу приношу извенения я только начал изучать языки програмирования не считая скриптов. Решил начать с асемблера. Посоветте с чего мне начать? где скачать програмное обеспечение для написания программ на асемблере? я скачал с http://softok.org/coding/debug/13111prog.html Turbo Assembler Shell v.3.00 пробывал запустить простенький код Code: .data msgtext db "Hello, WORLD", 0h msgcap db "It is ASM!!! =)", 0h .code start: INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0 end start конечно же неполучилось в ошибке пишут Оut-file not found какого выходного файла нету я понять немогу. вроде перед запуском проект сохранил. посоветте пожалусто чтонибть для совсем зелёных. заранее благодарен
ZET36 Оконная процедура должна возвращать НОЛЬ. + по событию WM_CLOSE закрываем диалог. CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63,11,0x00000200 - тут что-то неправильно!!! Для примера попробуй заменить на CONTROL "IDC_RED",IDC_RED1,"edit",0,1,1,63,11 Софт для асма бери на WWW.WASM.RU -> предпочтительно MASM or FASM.
ZET36 думаю для совсем зеленых подойдет вот этот вариант. если что то непонятно могу откоментировать. вот тут прямая ссылка на MASM. в нем я компилировал чего и вам желаю. http://wasm.ru/baixado.php?mode=tool&id=48 Code: .386 .model flat,stdcall option casemap:none include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\windows.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data msgtext db "Hello, WORLD", 0h msgcap db "It is ASM!!! =)", 0h .code start: invoke MessageBox, NULL, addr msgtext, addr msgcap, MB_OK invoke ExitProcess, NULL end start GlOFF хм.. где же в листинге вы нашли процедуру окна? я наконецто по лазил под отладчиком и наткнулся на то что при вызове диалоговой процедуры сначала ищется ресурс, если он не находится, то и не происходит вызова DialogBoxParam что и происходит у меня. вообщем посмотрел у Iczelion'a и нашел что у него имя ресурса задается ASCI-zero строкой. вообщем это внесло еще больше сумятицы в то что вы сказали что так нельзя. вы не могли бы довести проект до рабочего состояния, если вас не затруднит?
TruPAC Вот так попробуй компильнуть -> PHP: .386 .model flat,stdcall option casemap:none DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data AppName db "First",0 .data? hInstance HINSTANCE ? .const IDM_EXIT equ 32003 IDD_DLG2 equ 1000 IDC_RED1 equ 1001 .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam, hInstance, IDD_DLG2, NULL, ADDR DlgProc, NULL invoke ExitProcess,eax DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_INITDIALOG invoke GetDlgItem, hWnd, IDC_RED1 invoke SetFocus,eax .ELSEIF uMsg==WM_CLOSE invoke EndDialog, hWndn, 0 .ENDIF xor eax, eax ret DlgProc endp end start + PHP: #define IDD_DLG2 1000 #define IDC_RED1 1001 IDD_DLG2 DIALOGEX 5,5,65,13 CAPTION "IDD_DLG" FONT 10,"MS Sans Serif" STYLE 0x10CF0000 BEGIN CONTROL "IDC_RED",IDC_RED1,"edit",0,1,1,63,11 END TruPAC DlgProc - оконная\диалоговая процедура, обслуживает сообщения приходящие к данному диалогу. Просто щас сравни листинги и найди что изменилось.
ё маё... ну сколько ж можно... и так тоже не работает. вроде бы все нормально - проверял на чужих исходниках и все прекрасно собирается, а тут нет. у вас это точно собирается? мб ошибка не только у меня? не обижайтесь, а вдруг? вы можете приатачить файлы? я уже просто с ума схожу - 6 дней возни на стенке кашей и толку 0. Ps я всегда различал оконную и диалоговую процедуры.
GlOFF огромное спасибо! оказывается ошибка была в том что по какимто причинам мой линкер собирал новый вариант в папку общих документов и вместо того чтобы получить новый exe я работал со старым. сейчас я непременно посмотрю ваш вариант.
я до этого этот исходник компилил,но ничего не работало...оказалось дело в ключе /SUBSYSTEM:CONSOLE но все равно спасибо)
нужно написать прогу:создается файл(file1.txt) и туда из уже существуещего файла к примеру file.txt копируется текст. Написать нужно на апи используя асм. я раньше программировал на асм для контроллеров чуть-чуть, а с API познакомился совсем недавно так что не гнобите если немного чушь Code: .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\comdlg32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib .const MEMSIZE equ 65535 .data memor DB "d:\file.txt" file_name DB "d:\file1.txt",0 .data? hFile HANDLE ? hMemory HANDLE ? pMemory DWORD ? SizeReadWrite DWORD ? param HANDLE ? .code start: invoke OpenFile,ADDR memor,NULL,OF_READWRITE mov param,eax invoke CreateFile,ADDR file_name,\ GENERIC_READ or GENERIC_WRITE ,\ FILE_SHARE_READ or FILE_SHARE_WRITE,\ NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\ NULL mov hFile,eax invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE mov hMemory,eax invoke GlobalLock,hMemory mov pMemory,eax invoke SendMessage,param,WM_GETTEXT,MEMSIZE-1,pMemory invoke WriteFile,hFile,pMemory,MEMSIZE,ADDR SizeReadWrite,NULL invoke CloseHandle,hFile invoke GlobalUnlock,pMemory invoke GlobalFree,hMemory end start
Проще всего так: Code: .386 .model flat, stdcall option casemap:none include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data memor DB "d:\file.txt",0 file_name DB "d:\file1.txt",0 .code start: invoke CopyFile, offset memor, offset file_name, 1 invoke ExitProcess, 0 end start
Не получается ассемблировать с MASM611 При написании в ком. строку > ML.EXE PROG.ASM /AT получаю следующую ошибку: Assembling PROG.ASM fatal error A1000: cannot open file : PROG.ASM Так же пробовал и на TASM > TASM.EXE PROG.ASM вот что получаю **Fatal** Command line: Can't locate file PROG.ASM file PROG.ASM находится в той же папке где и ML.EXE . Код взял с книги Калашникова. Кто поможет в чём проблема?
ну допустип.... path на ML и TASM прописаны..... а не проще прописать полные маршруты к "сырцам"? Code: ML Fatal Error A1000 cannot open file: filename The assembler was unable to open a source, include, or output file. One of the following may be a cause: The file does not exist. The file is in use by another process. The filename is not valid. A read-only file with the output filename already exists. The current drive is full. The current directory is the root and is full. The device cannot be written to. The drive is not ready.
читаю книжку : "Ввод на уровне Bios: для непосредственного ввода с клавиатуры используют прерывание int 16h ... " я не совсем понял про прерывания в защищённом режиме ....возможно читать из под обычного NT ? ( если да - то можно пример кода? )
Нет.... низя там стоят "заглушки".... книжка явно заточена по ДОС! ... хотя если програмка запускается как DOS приложение под NT то туда кладутся псевдопрерывания(для совместимости) указывающие на "обработчики" нестандарта. Почему псевдо??? Потому что они так же хукаются
Jes, в винде всё - только через дрова, вроде... Ни int'ы аппаратные, ни in/out... Но где-то была библиотека, которая позволяет юзать их под виндой. Если надо - посмотри в гугле, если не найдёшь - спроси - посмотрю - у меня где-то валяется...
Взялся немножко Асм по ночам учить, книгу использую Пирогова В.Ю. он транслирует проги при помощи masm.exe, но в моей версии masm.exe не наблюдается, есть ml.exe и link.exe. Суть в том что листинги прог из книги, ml.exe транслирует с ошибками и собсно ничего не получается.. Как быть? Мож есть другие книги по изучению Асма под новые версии MASM-а? транслировал с параметрами ml /c /coff first.asm