WinApi und Assembler -> Freund oder Feind?^
-
Ich versuch mich gerade an Win32 Programme in Assembler, weil ich im Prinzip die ganzen Grundlagen vorher schon beherrsche, irgendwie erstaunlich.^^
Nun hab ich bemerkt, dass ein Programm, hier ein einfaches Fenster, in Assembler 2,5 kb groß ist und im Gegensatz dazu ein Fenster, welches mit C erstellt worden ist 57 kb groß ist.
Nun stell ich mir die Frage, ob es net besser wäre, wenn ich in Zukunft meine Winapi Programme alle über Assembler schreibe, weil ich irgendwie finde, dass es im Grunde das selbe ist, als wenn ich meine Programme über Winapi C oder Winapi Assembler schreibe.
ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TEST); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); }
mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW mov wc.lpfnWndProc,OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET szClassName invoke LoadIcon,NULL,IDI_APPLICATION mov hIcon,eax mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov hCursor,eax mov wc.hCursor,eax invoke RegisterClassEx,ADDR wc
Also für mich sieht das Beispielsweise fast gleich aus...
Oder vielleicht meint ihr ja sogar, dass sich der Aufwand gar nicht lohnt und man auf die wenigen KB's, die man einsparen kann, auch verzichten darf.^^
-
Tja, das sind dann halt irgendwelche Standard-Libraries mit Fehlerbehandlungs-, Ausgabe- und dazugehoerigen Initialisierungs-Dingen, usw.
Wenn man es wirklich darauf anlegt, bekommt man so ein C-Programm sicher auch auf eine aehnliche Groesse runtergebrochen.Weiter tendiere ich dazu, dieses MASM Macro-Gefrickel nicht mehr wirklich als Assembler anzusehen... Fuer kleinere Sachen laeuft das tatsaechlich bald auf einen aehnlichen Aufwand hinaus, wie eine Implementierung in C.
-
Nobuo T schrieb:
Weiter tendiere ich dazu, dieses MASM Macro-Gefrickel nicht mehr wirklich als Assembler anzusehen... Fuer kleinere Sachen laeuft das tatsaechlich bald auf einen aehnlichen Aufwand hinaus, wie eine Implementierung in C.
Wie meinst du das?
-
Freund.
wenn ich mir angucke, wie nervig all diese Datentypconvertierungen etc. sind, dann kommt mir edes mal, wenn ich in WinAPI C/C++ code die Galle hoch.. asm ist da viel netter^^
-
markusrw schrieb:
Nobuo T schrieb:
Weiter tendiere ich dazu, dieses MASM Macro-Gefrickel nicht mehr wirklich als Assembler anzusehen... Fuer kleinere Sachen laeuft das tatsaechlich bald auf einen aehnlichen Aufwand hinaus, wie eine Implementierung in C.
Wie meinst du das?
Schau dir doch zB. mal diesen MASM-Beispielcode in deinem "Frage zum Assembler Buch"-Thread an. Der Anteil von MASM-Spezifischen Macro-Scripts (while, if, invoke, etc. ist im eigentlichen Sinne kein Assembler-Code) und Strukturierungen im Code ist bald hoeher als der von tatsaechlichem Assemblercode, dh. Mnemonics.
-
Nobuo T schrieb:
markusrw schrieb:
Nobuo T schrieb:
Weiter tendiere ich dazu, dieses MASM Macro-Gefrickel nicht mehr wirklich als Assembler anzusehen... Fuer kleinere Sachen laeuft das tatsaechlich bald auf einen aehnlichen Aufwand hinaus, wie eine Implementierung in C.
Wie meinst du das?
Schau dir doch zB. mal diesen MASM-Beispielcode in deinem "Frage zum Assembler Buch"-Thread an. Der Anteil von MASM-Spezifischen Macro-Scripts (while, if, invoke, etc. ist im eigentlichen Sinne kein Assembler-Code) und Strukturierungen im Code ist bald hoeher als der von tatsaechlichem Assemblercode, dh. Mnemonics.
Das stimmt, aber im Vergleich zu HLA ist MASM doch wirklich noch ein echtes Assembler.^^
Aber naja ok, wäre NASM ein "echteres" Assembler als MASM, hab nämlich NASMX gefunden, soll auch NASM32 heißen, damit soll man auch sowas erstellen können.
-
Hallo,
habe grade was ausprobiert:
> strip --version GNU strip 2.17.50 20060824 Copyright 2005 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. > dir -a--- 28.12.2007 11:46 25306 devcaps1.exe > strip devcaps1.exe > dir -a--- 19.05.2008 21:38 8704 devcaps1.exe
Und die exe scheint noch lauffähig zu sein... Cool, da steckt Faktor 3 dahinter, ohne stundenweise Assemblercode zu debuggen...
-
markusrw schrieb:
[...]Das stimmt, aber im Vergleich zu HLA ist MASM doch wirklich noch ein echtes Assembler.^^
Naja, diese Art der Macro-Programmierung, die in diesen MASM-Beispielen beschrieben wird, aehnelt wie gesagt bald eher einer Hochsprache. So gesehen ist MASM eher schon etwas mehr als nur ein Assembler.
markusrw schrieb:
Aber naja ok, wäre NASM ein "echteres" Assembler als MASM[...]
Nein. Ein besserer vielleicht, aber das geht am Thema vorbei. :p
markusrw schrieb:
[...]hab nämlich NASMX gefunden, soll auch NASM32 heißen, damit soll man auch sowas erstellen können.
Du meinst dieses Macro-Paket? Kenne ich nicht genau, aber wenn das auf etwas Aehnliches wie diese MASM-Scripts hinauslaeuft, frage ich mich, wieso du stattdessen nicht gleich in einer Hochsprache mit inline asm programmierst?
Irgendwann fuehrt es das Konzept eines Assemblers auch einfach ad absurdum.