WinAPI in Assembler

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Aha jemand hat mir erzählt das hätte mit der Stackreservierung zu tun... /:-> Naja egal, Hauptsache ich weiß wie mans anwenden muss... :lol:

Aber ich hab der Linker hat jetzt wieder was zu kritisieren:
GoLink hat geschrieben:Assumed entry point (Start) was not found.
:? Was stimmt da nicht???

Code: Alles auswählen

;====>> ASM Code generated by C^^

format MS COFF
extrn _AllocConsole@0
extrn _Beep@8
extrn _ExitProcess@0
extrn _FreeConsole@0
extrn _Sleep@4

section '.text' code readable executable

start:
MOV eax,dword 324
MOV dword[v_nme],eax
MOV eax,dword 454
MOV dword[v_nmd],eax
MOV eax,dword[v_nme]
CMP eax,dword[v_nmd]

PUSH dword 1000
PUSH dword 200
CALL _Beep@8

MOV eax,dword[v_nmd]
ADD dword[v_nme],eax

MOV eax,dword[v_nmd]
SUB dword[v_nme],eax

MOV eax,dword[v_nme]
IMUL dword[v_nmd]
ADD eax,edx
MOV dword[v_nme],eax

MOV ebx,dword[v_nme]
MOV eax,ebx
MOV ebx,dword[v_nmd]
CDQ
IDIV ebx
MOV ebx, eax
MOV dword[v_nme],ebx

CALL _AllocConsole@0

PUSH 2000
CALL _Sleep@4


section '.data' data readable writeable

v_nme rd  1

v_nmd rd  1
Greetz,
AndyX
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Da muss irgendwo:
public _WinMain@16
_WinMain@16:
rein.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

WinMain hm ja das hab ich andauernd im PB AsmOutput gelesen hab mir aber nix großes dabei gedacht... :oops:

Gleich probieren...

EDIT: Der selbe Fehler kommt. So müsste es doch stimmen, steht ja auch im PB ASM, oder stimmts nich? :?

Code: Alles auswählen

;====>> ASM Code generated by C^^

format MS COFF
extrn _AllocConsole@0
extrn _Beep@8
extrn _ExitProcess@0
extrn _FreeConsole@0
extrn _Sleep@4

public _WinMain@16

section '.text' code readable executable

_WinMain@16:
MOV eax,dword 324
.....................
Greetz,
AndyX
Benutzeravatar
fsw
Beiträge: 74
Registriert: 12.09.2004 03:31
Wohnort: North by Northwest

Beitrag von fsw »

Andi,
wenn du wirklich asm lernen willst dann koenntest du dir auch BASM32 ansehen unter yahoo groups.
http://groups.yahoo.com/group/BASM32/

Ist ein kleiner basic zu asm compiler der sich selbst compiliert.
Benutzt zwar goASM und goLINK (also nur auf Windows laeuft), aber zum lernen ist es ja egal mit welchem assembler man rumspielt.

Der vorteil ist das es recht klein ist und ueberschaubar.

Wenn nicht von interesse, dann entschuldige bitte dass ich mich eingemischt habe.

Schoenen tach noch...
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Danke für den Vorschlag :) aber ich bleib lieber bei FASM. Aber vllt schau ich mir das mal an. thx

PS: Hat irgendwer eine Idee wie ich das Linker Problem lösen kann?

Greetz,
AndyX
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

AndyX hat geschrieben:Aber ich hab der Linker hat jetzt wieder was zu kritisieren:
GoLink hat geschrieben:Assumed entry point (Start) was not found.
Dein Label ist klein geschrieben (start:) und ist nicht public.

Da Du jetzt _WinMain@16 nimmst, mußt Du das vielleicht
noch an polink übergeben. Hängt halt vom Linker ab.

Bei polink müßte das mit "/ENTRY:_WinMain@16" gehen.
Da vordefinierte Entrypoints auch in der Default-Lib sind,
kann auch ein "/NODEFAULTLIB" nötig sein.

Die Doku zu diesen Werkzeugen (FASM, POLINK etc.) hilft
Dir weiter. Wenn Dich das nicht interessiert hast Du Pech.


In Deinem obigen Code hast Du zwar schon "extrn _ExitProcess@0"
drin, aber der Aufruf dafür am Ende fehlt. Das heißt Dein Programm
wird nach dem Sleep_(2000) nicht beendet, sondern läuft in
undefiniertem Speicher weiter...
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich erriner mich :freak:.
Das start: war schon richtig. Du musst aber die start: auch exportieren. Das machst du mit "public start"
Bild
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Danke jetzt wirds mir klarer. :D Die Dokus werd ich mir auf jeden Fall mal reinziehen ^^

Hm ich wäre eigentlich nich draufgekommen, dass das Programm im Speicher weiterläuft :| Zu DOS Zeiten machte man das mit den BIOS oder DOS Interrupts, und ich dachte das wär in der 32-Bit Welt nicht mehr nötig :mrgreen:

JETZT FUNKTIONIERTS!!!!!!!!!! :D :D :D JUHUUUUUUUUUU! <)

THX euch allen!!! :)

Sry für die vielen Rufzeichen aber ich könnt mir nen Haxen ausfreuen :mrgreen:

Nur eins würd mich noch interessieren: Polink meint:

POLINK: warning: Multiple '.data' sections found with different flags (0xc0000c0 and 0xc0000040)

Was hat das zu bedeuten? :|

Greeeeetz,
AndyX
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

das heißt, dass es in 2 verschiedenen obj Dateien eine Data section gibt. Ist aber nicht unbedingt schlim. Denke ich mir zumindest.
Bild
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

LOL mein "Compiler" erzeugt bei einem Code Console öffnen und beepen eine Exe mit 1356 Bytes und bei einer PB Exe sinds 4608 :lol: :mrgreen:

Ich mache PB Konkurrenz! :twisted: :mrgreen: ne warn Spaß ^^

Übrigens wer mal mein "Compiler"-Ding sehen will:

http://andyx.an.funpic.de/

xD

Is aber noch ziemlich blöde. Vor allem die Syntax: vergleiche nme nmd :roll: Aber es kann schon bisschen was :mrgreen:

^^

Greetz,
AndyX
Antworten