Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите начинающему!!!! Asm32

12K
21 ноября 2005 года
yrmih77
22 / / 21.11.2005
Установил ASM32 на WindME, попытался компилировать текст простой консоли. В итоге получил:
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
239
22 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by yrmih77
Установил ASM32 на WindME, попытался компилировать текст простой консоли. В итоге получил:
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!

У нас есть форум по низкоуровневому программированию, перенесу-ка я эту тему туда, может ответят.

Моя личная рекомендация - сноси МЕ и ставь 2000 :)

2
22 ноября 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by yrmih77
Установил ASM32 на WindME, попытался компилировать текст простой консоли. В итоге получил:
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!


а файл rsrc.res присутствует?

10K
22 ноября 2005 года
JhuSS
37 / / 20.10.2005
Это ошибка не твоей программы и не компилятора. Скорее всего у тебя asmedit висит шапкой на masm32. Он при сборке проекта компилит по умолчанию ресурса , оные по умолчанию берет как rcrc.rc. He страшно , там в тулбаре есть кнопки 1,2,3,4,5. 1- запускает компилятор ресурсов , остальные все по очереди далее. Нажми подряд 2,3,4 - или даже 3,4 и все получится. И еще ,по умолчанию он лепит PE.
12K
22 ноября 2005 года
yrmih77
22 / / 21.11.2005
.....вобчем дела хреноватенько-непонятнинькие.
Файлов rsrc.res -22 штуки
------ rsrc.rc -120 тоже штук
пробавал masm32 устанавливать на W98
В тулбаре 1,2,3,4 ...... не нашел нет уменя этого
Результат не меняется.
10K
23 ноября 2005 года
JhuSS
37 / / 20.10.2005
Создай такой бат файл
C:\masm32\bin\ml /c /coff ***.asm
C:\masm32\bin\Link /SUBSYSTEM:CONSOLE ***.obj
Где вместо ***-имя твоего файла, и запусти его из папки с твоей программой.
Ресурсы точно никто не затребует.
12K
23 ноября 2005 года
yrmih77
22 / / 21.11.2005
Цитата:
Originally posted by JhuSS
Создай такой бат файл
C:\masm32\bin\ml /c /coff ***.asm
C:\masm32\bin\Link /SUBSYSTEM:CONSOLE ***.obj
Где вместо ***-имя твоего файла, и запусти его из папки с твоей программой.
Ресурсы точно никто не затребует.




JhuSS, я очень признателен тебе за участие.
Но ответь пож., что это воабще за хрень такая?
Может стоит все поломать и начать заново?
Я уже долго долблюсь с этим начинанием и постоянно меня преследуют какие-то непонятки и ошибки. Мог бы ты посоветовать с чего начать?
Что бы это было 100% рабочим?

10K
24 ноября 2005 года
JhuSS
37 / / 20.10.2005
Простое окошко.
Фаил ресурса rcrc.rc

#include "\masm32\include\resource.h"

600 MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE
BEGIN
POPUP "Файл", , , 0
BEGIN
MENUITEM "Открыть",1
MENUITEM "Сохранить_как",2
MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/
MENUITEM "Выход",0
END
POPUP "Функции", , , 0
BEGIN
MENUITEM "f3",3
MENUITEM "f2",4
MENUITEM "f3",5
END
END

Твоя программа: begin.asm

.386
.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\shell32.inc
include \MASM32\INCLUDE\masm32.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\gdi32.inc
include \MASM32\INCLUDE\comdlg32.inc

includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\comdlg32.lib

WndProc proto :dword,:dword,:dword,:dword
MainWork proto :dword,:dword

show proto :dword,:word






.data?

hWnd dd ?
hMenu dd ?
hInst dd ?
hIcon dd ?
maxX dd ?
maxY dd ?

hDC dd ?
hBitmap dd ?
hBrush dd ?
hMemDC dd ?

hfile dd ?
file_size dd ?
bmi_str dd ?
lpscreen dd ?

hheap dd ?
pmemory dd ?

bif BITMAPFILEHEADER <>
bi BITMAPINFOHEADER <>
rgb RGBQUAD <>
Ps PAINTSTRUCT <>
ofn OPENFILENAME <>
wc WNDCLASSEX <>
msg MSG <>
file_name db 256 dup (?)
work_indikator dw ?
.data

szDisplayName db "BMP",0
szClassName db "bmp_class",0
files_filtr db "bmp Files ",0,"*.bmp",0,"all Files ",0,"*.*",0,0

.code

start: invoke GetModuleHandle,0
mov hInst,eax
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,0
mov wc.cbWndExtra,0
push hInst
pop wc.hInstance
invoke GetStockObject,GRAY_BRUSH
mov wc.hbrBackground,eax
mov wc.lpszMenuName,600
mov wc.lpszClassName,offset szClassName
invoke LoadIcon,hInst,IDI_APPLICATION
mov hIcon,eax
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,0,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
test eax,eax
jz quit_loop

mov ofn.lStructSize,sizeof OPENFILENAME
mov ofn.lpstrFilter,offset files_filtr
mov ofn.nMaxFile,256
mov ofn.lpstrFileTitle,0
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_EXPLORER
mov ofn.lpstrDefExt,0
mov ofn.lpstrFile,offset file_name
invoke CreateWindowEx,WS_EX_LEFT,addr szClassName,addr szDisplayName,
WS_OVERLAPPEDWINDOW or WS_VSCROLL or WS_HSCROLL,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,
0,0,hInst,0
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
msg_loop: invoke GetMessage,addr msg,0,0,0
test eax,eax
jz quit_loop
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
jmp msg_loop
quit_loop: mov eax,msg.wParam
invoke ExitProcess,eax




WndProc proc hWin:dword,uMsg:dword,wParam:dword,lParam:dword
mov eax,uMsg
cmp eax,WM_DESTROY
je _wm_destroy
cmp eax,WM_CREATE
je _wm_create
cmp eax,WM_PAINT
je _wm_paint
cmp eax,WM_CLOSE
je _wm_close

cmp eax,WM_COMMAND
je _wm_command
_wm_out: invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
_wm_create: invoke GetSystemMetrics,SM_CXSCREEN
mov maxX,eax
invoke GetSystemMetrics,SM_CYSCREEN
mov maxY,eax
invoke GetDC,hWin
mov hDC,eax
invoke CreateCompatibleDC,hDC
mov hMemDC,eax
invoke CreateCompatibleBitmap,hDC,maxX,maxY
mov hBitmap,eax
invoke SelectObject,hMemDC,hBitmap
invoke GetStockObject,GRAY_BRUSH
mov hBrush,eax
invoke SelectObject,hMemDC,hBrush
invoke PatBlt,hMemDC,0,0,maxX,maxY,PATCOPY
invoke ReleaseDC,hWin,hDC
xor eax,eax
ret
_wm_paint: invoke BeginPaint,hWin,addr Ps
mov hDC,eax
invoke SelectObject,hMemDC,hBitmap
invoke BitBlt,hDC,0,0,maxX,maxY,hMemDC,0,0,SRCCOPY
invoke EndPaint,hWin,addr Ps
xor eax,eax
ret
_wm_command: mov eax,wParam
test eax,eax
jz _wm_close
cmp eax,5
jg _wm_out
invoke MainWork,hWin,wParam
xor eax,eax
ret
_wm_close: invoke MainWork,hWin,3
_wm_destroy: invoke PostQuitMessage,0
xor eax,eax
ret
WndProc endp




MainWork proc hWin:dword,wParam:dword
local buff_data:dword
mov eax,wParam
jmp dword ptr menu_handlers[eax*4]
menu_handlers dd idm_Quit
dd idm_Open
dd idm_Save_as
dd idm_f1
dd idm_f2
dd idm_f3

idm_Open: invoke GetOpenFileNameA,offset ofn
test eax,eax
jz idm_Quit
invoke CreateFileA,offset file_name,GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE,0h
mov hfile,eax
invoke GetFileSize,hfile,0
mov file_size,eax
invoke GetProcessHeap
mov hheap,eax
invoke HeapAlloc,hheap,0,file_size
mov pmemory,eax
invoke ReadFile,hfile,pmemory,file_size,offset file_size,0
invoke CloseHandle,hfile


mov ebx,offset file_name
mov ecx,256
find_point: mov al,[ebx]
cmp al,'.'
je new_fn
inc ebx
loop find_point
new_fn: mov buff_data,ebx
mov ax,'a_'
mov [ebx],ax
inc ebx
inc ebx
mov eax,'pmb.'
mov [ebx],eax
mov work_indikator,0
idm_Quit: ret
idm_Save_as: cmp work_indikator,0
je idm_Quit
mov ofn.Flags,OFN_EXPLORER or OFN_OVERWRITEPROMPT
invoke GetSaveFileNameA,offset ofn
test eax,eax
je idm_Quit
invoke CreateFileA,offset file_name,GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,0h
mov hfile,eax
mov esi,pmemory
mov edi,offset bif
mov ecx,14
_bif_copy: push [edi]
inc edi
pop [esi]
inc esi
loop _bif_copy
mov edi,offset bi
mov ecx,40
_bi_copy: push [edi]
inc edi
pop [esi]
inc esi
loop _bi_copy
invoke WriteFile,hfile,pmemory,file_size,offset file_size,0
invoke CloseHandle,hfile
mov work_indikator,0
ret
idm_f1:
jmp show_work
idm_f2:
jmp show_work
idm_f3:
jmp show_work

show_work:
inc work_indikator
ret

MainWork endp
end start
12K
24 ноября 2005 года
yrmih77
22 / / 21.11.2005
JhuSS, привет!
Большое тебе спасибо за текст, но наверное я забыл сообщить, что я "чайник" в программировании
(даже "чайник" для меня комплемент) и кроме огромного желания я ничего не имею.
Так, что если тебе не трудно чиркни что за программа - ниже "окошка" и с чем ее "едят"?
За ранее спасибо.
10K
25 ноября 2005 года
JhuSS
37 / / 20.10.2005
yrmih77 Если у тебя masm7.0 то в папках masm32\EXAMPLE*\ - найдешь кучу примеров на все случаи оконных приложений. + есть программки PROSTART.EXE и PSTOLD.EXE – это своеобразная студия проектов на языке асма.
Разберу простейший случай. Никаких баров и меню. Добавишь сам в студии и посмотришь что изменилось в проекте. В ходе сего заглянешь блокнотом Rcrc.rc – для уяснения что есть ресурсы. + бат для сборки проекта - makeit.bat. Некоторые макросы m2m и return – найдешь в inc. Invoke – это можно сказать тоже макрос , оный по в обратном порядке все загоняет в стек и делает обращение к функции. Буду комментировать действия программы. Такие штуки как NULL или SW_SHOWDEFAULT – константы определенные в файле windows.inc.
10K
25 ноября 2005 года
JhuSS
37 / / 20.10.2005
.386
.model flat, stdcall ; 32 bit memory model
option casemap : none ; case sensitive

include Project.inc ; local includes for this file

.code

start:
invoke GetModuleHandle, NULL
mov hInstance, eax ; - идентификатор создаваемого по программе процесса

invoke GetCommandLine
mov CommandLine, eax ; - указатель на адрес командной строки , здесь можно искать всякие ключи и прочие задаваемые при запуске параметры

invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT ; Пережиток Си-шной модульности , можно и так.
invoke ExitProcess,eax ; - выход

WinMain proc hInst: DWORD, ; - сие есть те 4 параметра , оные процедура получает в стеке.
hPrevInst: DWORD,
CmdLine: DWORD,
CmdShow: DWORD

;====================
; Put LOCALs on stack
;====================

LOCAL wc :WNDCLASSEX ; локальные данные процедуры , физически довешиваются к стеку с другой стороны , например сие – описанная в windows.inc структура данных
LOCAL msg: MSG
LOCAL Wwd: DWORD
LOCAL Wht: DWORD
LOCAL Wtx: DWORD
LOCAL Wty: DWORD

;==================================================
; Fill WNDCLASSEX structure with required variables
;==================================================

invoke LoadIcon,hInst,500 ; icon ID - увидишь сие число в файле ресурсов как определитель иконки
mov hIcon, eax

szText szClassName,"Project_Class"

mov wc.cbSize, sizeof WNDCLASSEX ; Заполнение структуры параметрами , в винде почти все через всевозможные структуры.
mov wc.style, CS_HREDRAW or CS_VREDRAW \
or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc ; -важно- указатель на процедуру обслуживания сообщений окна
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInst
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
m2m wc.hIcon, hIcon
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
m2m wc.hIconSm, hIcon

invoke RegisterClassEx, ADDR wc ; - регистрация класса твоего окна в системе , addr это такой offset для обращения от сегмента кода , т.е. когда структура локальна.

;================================
; Centre window at following size
;================================

mov Wwd, 500 ; задаем размеры окна и судя по тому , что делает TopXY – размещаем его в центре экрана монитора.
mov Wht, 350

invoke GetSystemMetrics,SM_CXSCREEN
invoke TopXY,Wwd,eax
mov Wtx, eax

invoke GetSystemMetrics,SM_CYSCREEN
invoke TopXY,Wht,eax
mov Wty, eax

invoke CreateWindowEx,WS_EX_LEFT, ; создаем в системе объект окна зарегистрированного нами выше класса
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInst,NULL
mov hWnd,eax

invoke LoadMenu,hInst,600 ; menu ID – зачем то грузим меню (ошибка сих микростудий , меню здесь нет ) , кстати потом увидишь в ресурсах сие меню - 600
invoke SetMenu,hWnd,eax ; написав еще одно меню в ресурсах , допустим 601, этой командой можно поменять меню окна.

invoke ShowWindow,hWnd,SW_SHOWNORMAL ; выводим окно на экран.
invoke UpdateWindow,hWnd

;===================================
; Loop until PostQuitMessage is sent
;===================================

StartLoop: ; - сие бесконечный цикл перекидывания сообщений системы в нашу форточку. Пока GetMessage не даст ошибку(еах=0), что обеспечивает окну постоянное висение в системе.
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:

return msg.wParam

WinMain endp
10K
25 ноября 2005 года
JhuSS
37 / / 20.10.2005
WndProc proc hWin : DWORD, ; Сие – наш описатель окна
uMsg : DWORD, ; - само сообщение
wParam : DWORD, ; параметры пришедшие с сообщением , создашь меню – поймешь какие.
lParam : DWORD

LOCAL var : DWORD
LOCAL caW : DWORD
LOCAL caH : DWORD
LOCAL Rct : RECT
LOCAL hDC : DWORD
LOCAL Ps : PAINTSTRUCT

.if uMsg == WM_COMMAND ; - ну тут даже подписали что здесь будет
;======== menu commands ========
.elseif uMsg == WM_CREATE ; - приходит при открытии окна , хочешь что сделать в сей момент - сюда

.elseif uMsg == WM_SIZE ; - сюда при изменении размеров окна

.elseif uMsg == WM_PAINT ; - перерисовка изображения окна , когда оно выныривает из под других окон.
invoke BeginPaint,hWin,ADDR Ps
mov hDC, eax
invoke Paint_Proc,hWin,hDC
invoke EndPaint,hWin,ADDR Ps
return 0

.elseif uMsg == WM_CLOSE ; сообщение - а напоследок я скажу….
szText TheText,"Please Confirm Exit"
invoke MessageBox,hWin,ADDR TheText,ADDR szDisplayName,MB_YESNO ; - окно сообщения «в натуре ?» о закрытии.
.if eax == IDNO
return 0
.endif

.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL А это то что шлет ошибку в вышеописанный бесконечный цикл
return 0
.endif

invoke DefWindowProc,hWin,uMsg,wParam,lParam ; то чего не переварим – нехай переваривает система сама. Путь для необработанных сообщений , а их тьма…

ret

WndProc endp
10K
25 ноября 2005 года
JhuSS
37 / / 20.10.2005
TopXY proc wDim: DWORD, sDim: DWORD

shr sDim, 1 ; divide screen dimension by 2
shr wDim, 1 ; divide window dimension by 2
mov eax, wDim ; copy window dimension into eax
sub sDim, eax ; sub half win dimension from half screen dimension

return sDim

TopXY endp


Paint_Proc proc hWin: DWORD, hDC: DWORD

LOCAL btn_hi : DWORD
LOCAL btn_lo : DWORD
LOCAL Rct : RECT

invoke GetSysColor,COLOR_BTNHIGHLIGHT
mov btn_hi, eax

invoke GetSysColor,COLOR_BTNSHADOW
mov btn_lo, eax

return 0

Paint_Proc endp



end start
10K
25 ноября 2005 года
JhuSS
37 / / 20.10.2005
Пришли приватом свой почтовый ящик.
12K
28 ноября 2005 года
yrmih77
22 / / 21.11.2005
Цитата:
Originally posted by JhuSS
Пришли приватом свой почтовый ящик.




JhuSS,привет!
Несколько дней, почему-то, "коденет" был недоступен, теперь вот пишу.
Твою инфу скопировал - буду пережовывать.
Хочу сообшить (я имею опыт в электроннике т.е.
схемы,железо и т.п. может на что сгожусь.
Юрий. [email]yrmih77@mail.ru[/email]

255
29 ноября 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by yrmih77
JhuSS,привет!
Несколько дней, почему-то, "коденет" был недоступен, теперь вот пишу.
Твою инфу скопировал - буду пережовывать.
Хочу сообшить (я имею опыт в электроннике т.е.
схемы,железо и т.п. может на что сгожусь.
Юрий. [email]yrmih77@mail.ru[/email]


Во-первых читать надо уроки Iczelion'a - если у тебя в дистрибе masm32 нема - google рулит - это классика.
Во вторых совет - лучше не свети свое мыло на форумах - потом будет приходить куча спама. :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог