Самый большой геммор с API функциями.
ЗЫ. На другой язык переходить крайне не охота, хочется написать именно на асме.
ЗЫ2. Если попал не в тот раздел/сайт, то в описании раздела есть строчка "языки программирования".
Код: Выделить всё
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib ; calls to functions in user32.lib and kernel32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
.DATA ; initialized data
ClassName db "SimpleWinClass",0 ; Имя нашего класса окна
AppName db "Our First Window",0 ; Имя нашего окна
.DATA? ; Hеиницилизиpуемые данные
hInstance HINSTANCE ? ; Хэндл нашей пpогpаммы
CommandLine LPSTR ?
.CODE ; Здесь начинается наш код
start:
invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы
; Под Win32, hmodule==hinstance mov hInstance,eax
mov hInstance,eax
invoke GetCommandLine ; Взять командную стpоку. Вы не обязаны
вызывать эту функцию ЕСЛИ ваша пpогpамма не обpабатывает командную стpоку.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ; вызвать основную функцию
invoke ExitProcess, eax ; Выйти из пpогpаммы.
; Возвpащаемое значение, помещаемое в eax, беpется из WinMain'а.
WinMain proc
hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; создание локальных пеpеменных в стеке
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX ; заполнение стpуктуpы wc
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc ; pегистpация нашего класса окна
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow ; отобpазить наше окно на десктопе
invoke UpdateWindow, hwnd ; обновить клиентскую область
.WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam ; сохpанение возвpащаемого значения в eax
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY ; если пользователь закpывает окно
invoke PostQuitMessage,NULL ; выходим из пpогpаммы
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция обpаботки окна
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start
Библиотека. Подключается к программе. Там есть набор функций, загрузить изображение, нарисовать изображение, вывести на экран. И программируется куда проще, чем winapi. К тому же быстрее, потому что использует видеоускоритель. Теоретически, его можно и к ассемблеру подцепить, но нужно писать врапер.АндрейАвербах писал(а):Это что?2д двигло HGE
Зря боитесь. Одно другому не мешает, тем более что сам ассемблер у AVR и x86 прилично различается. Писать на ассемблере под windows имеет наверно смысл только в общеобразовательных целях, да и то если делать нечего, ну или если действительно нужно сделать что-то мегаоптимизированное. Я раньше немного баловался ассемблерными вставками в delphi, когда например надо было работать с ком-портом, но чем новее винда, тем меньше она разрешает делать и приходится использовать ее стандартные библиотеки (а с семеркой я даже и не пробовал). Вы же не забываете ассемблер, когда разговариваете по русски?АндрейАвербах писал(а):я боюсь, что если стану программровать на другом языке, то забуду МК-асм.
Разве ктото говорил про AVR ? -))Engineer_Keen писал(а): Зря боитесь. Одно другому не мешает, тем более что сам ассемблер у AVR и x86 прилично различается.
Код: Выделить всё
// Ïðîãðàììà äëÿ ïðåîáðàçîâàíèÿ
// ãðàäóñîâ Öåëüñèÿ â ãðàäóñû Ôàðåíãåéòà:
// Fahrenheit = NCelsius * (212 - 32)/100 + 32
//
#include <stdio.h>
#include <iostream.h>
int main(int nNumberofArgs, char* pszArgs[])
{
int nNCelsius;
cout << "Input temperature: ";
cin >> nNCelsius;
int nNFactor;
nNFactor = 212 - 32;
int nFahrenheit;
nFahrenheit = nNFactor * nNCelsius/100 + 32;
cout << "Temperature:";
cout << nFahrenheit;
return 0;
}
ПодразумевалРазве ктото говорил про AVR ?
А не много ли строк для создания окна?АндрейАвербах писал(а):набираю в масм32 едитор такой код
Код: Выделить всё
OpenWindow(0,0,0,200,100, "Окно", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindowКод: Выделить всё
#include <stdio.h>
#include <iostream.h>
int main()
{
int nAny;
cout << "Input anything: ";
cin >> nAny;
cout << "You type: ";
cout >> nAny;
return 0;
}Код: Выделить всё
Я тоже подумываю стоит ли, так как программа не хочет компилитьсяВы забыли добавить в кода строку.АндрейАвербах писал(а):При попытке компиляции этих строк компилятор ругается такими словами
In function 'int main()' no match for 'operator>>' in 'std::cout>>nAny'
Код: Выделить всё
using namespace std;С ним не проще чем с асмом. Уж поверьте.АндрейАвербах писал(а):Все работает, а про С++ можете мне рассказать?
Ну блин, Satyr, не знаешь контекста, а сразу на AVR наезжаешьSatyr писал(а):Разве ктото говорил про AVR ? -))
Перед Main.АндрейАвербах писал(а):А кудысь именно ее добавлять?