Такая ситуация, владею Object Pascalи C++ в общих чертах , но думаю какой язык учить в совершенстве? Знаю что Ассемблер очень мощный язык, но реально ли на нем писать оконные программы такие как в делфи например?и если не трудно напишите пожалуйста код на асме, который просто саздает окно, такое как в делфи по стандарту в новом проэкте идет.
6 февраля 2010 в 9:04
Автору. И всем остальным тоже полезно будет.
Не ассемблер надо изучать, а АРХИТЕКТУРУ компьютера для программиста. Чтобы знать представление целых и дробных чисел, чтобы понимать, что такое регистры, сечь, что такое адрес и соответственно – что лежит в переменной-указателе. Какие методы адресации поддерживает процессор, и почему. Что такое CISC и RISC – и почему.
Если будете сечь архитектуру, то с ассемблером проблем не будет.
Ассемблер – это просто мнемоническая запись команды. И еще – почему нужны директивы-псевдокоманды.
6 февраля 2010 в 7:00
спасибо всем!
6 февраля 2010 в 0:02
а я контроллеры программирую.
Там на ассемблере все хорошо (быстро, компактно, надежно) делается.
Вот решил на Си переходить.
Но наоборот… Ересь
5 февраля 2010 в 23:03
.386
.model flat,stdcall
option casemap:none
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
WinMain proto WORD,:DWORD,:DWORD,:DWORD
.data
ClassName db "SimpleWinClass",0
AppNamedb "Our First Window",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.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:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
movwc.cbSize,SIZEOF WNDCLASSEX
movwc.style, CS_HREDRAW or CS_VREDRAW
movwc.lpfnWndProc, OFFSET WndProc
movwc.cbClsExtra,NULL
movwc.cbWndExtra,NULL
pushhInstance
popwc.hInstance
movwc.hbrBackground,COLOR_WINDOW+1
movwc.lpszMenuName,NULL
movwc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
movwc.hIcon,eax
movwc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
movwc.hCursor,eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
movhwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
moveax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start
выглядит огромно. НО. весь этот код – шаблонный.Самое интересное – дальше, когда дописывать разные кнопки итп.
дада это не мой код. это третий пример из туториалов lczelion'a
могу посоветовать wasm.ru lkдля начала обучения асму.
5 февраля 2010 в 23:00
А раз ассемблер мощный, может создадим окно без апи? ))) Я думал автор просит исходник, создающий окно (при этом представляется огромный текст…).
5 февраля 2010 в 23:00
Ну вообще исходник получить довольно просто:
можно взять тот же делфи, скомпилировать программу – а потом ее дизасемблировать) В особенно в случае делфи желание таким образом разрабатывать ПО исчезает надолго)
5 февраля 2010 в 22:00
Согласен. По крайней мересоздание окон на асме не добавит скорости к вашему приложению. Не в ту сторону смотрит автор.
5 февраля 2010 в 21:04
учебник для асма, хотя бы для начала: автор Абель
5 февраля 2010 в 21:04
Аффтар, вы обкурились? ))
прогрессивное человечество думает в сторону декларативных языков для создания оконных приложений а вам приспичило на ассемблере их писать…
Если вы не пишете собственно компилятор, то я честно не представляю зачем вам может понадобиться ассемблер.
и более того неоправданное использование ассеблера- это проблемы с переносимостью в будущем
5 февраля 2010 в 21:03
Мой те совет..учи в совершенстве C++, а заодно и освой асм, безотказная связка. Чисто на асме щас практически не пишется, кроме пожалуй чего-нить термоядерного..например драйверов, отдельных системный функций и антивирусов. и опять же используют ассемблеровские вставки.
Могу посоветовать книгу по асму Надежды Григорьевны Голубь "Искусство программирования на ассемблере".В электронке она есть. Думаю этого хватит.
5 февраля 2010 в 21:03
В. И. Юров "Assembler. Учебник для вузов" (2-е издание) издательство "Питер"
5 февраля 2010 в 21:02
мне кажется это интереснее чем на языках высокого уровня… просто еще хочется овладеть дебагером в полной мере…
5 февраля 2010 в 21:02
Есть такая весчь Visual Assembler.
5 февраля 2010 в 21:02
>>просто еще хочется овладеть дебагером в полной мере…
догадываюсь, для чего
5 февраля 2010 в 21:02
а код обычного окна может кто нить привести написсаный вручную?
5 февраля 2010 в 21:02
#5 именно для этого )
5 февраля 2010 в 21:02
У Юрова есть примеры и консольных, и оконных приложений с использованием WinAPI.
5 февраля 2010 в 21:02
а можно точное название книжки?
5 февраля 2010 в 21:02
лично мне ассемблер помог в плане большего понятия логики выполнения и заставил научиться экономнее использовать ресурсы системы
5 февраля 2010 в 21:02
Ну на вскидку я те не напишу, но окно создаётся несколькими апи функциями
CreateWindow,RegisterClassEx, ShowWindow. Можешь посмотреть пустой проект с формой на VisualStudio и посмотреть структуры.
5 февраля 2010 в 21:01
Писать-то реально, но стоит ли…