2 fragen (nasm + _emit)
-
hi
ok. also das vorab:
proggen kann ich. :p nur von asm hab ich keine ahnungso. ich hab hab im net nen code code gefunden, der die cpu-leistung ausgibt. das hab ich versucht zu compileiren, aber das is wohl vc++ syntax
und zwar meckert er bei den befehlen:_asm _emit 0x0F _asm _emit 0x31
was bitte is "_emit" ? soll das der binäre befehl-code sein oder n interrupt ?
vielleicht weiß das ja jemand.
(ich kann auch den kompletten code posten, wenns sein muss)so und 2. frage:
ich hab tasm32 im zusammenhang mitm bcc55. is ja auch ganz net. nur hab ich jetzt gelesen, dass nasm besser sein soll. (FAQ ;)) gerade mit invoke und so. wollte ich mir mal angucken. aber irgendwie...ich weiß nich. bin ich zu dumm dazu ? ich hab die website rauf und runter gelesen. alles was ich downloaden kann, sind 2exe-datein von SourceForge.net - die einer der compiler und der andere der disasembler. ok, ich erwarte gar keine ide, aber so n paar libraries und includes wärn doch für den anfang nich sechelcht. gibts die irgendwo oder wie is das ?lw
-
Hi.
Zu 1:
Mit _emit sollen einfach direkt diese Bytes in den Code geschrieben werden.
Equivalent bei NASM/TASM/MASM waere "db Nummer".
In deinem Fall also:db 0Fh db 31h
oder keurzer:
rdtsc
Zu 2.:
IDE kriegst du eigentlich zu keinem Assembler dazu - klar.
Und was fuer Includes/Libs wolltest du jetzt noch haben?
Ich habe da zumindest bisher noch nicht wirklich was vermisst...
-
Lawilog schrieb:
alles was ich downloaden kann, sind 2exe-datein von SourceForge.net - die einer der compiler und der andere der disasembler. ok, ich erwarte gar keine ide, aber so n paar libraries und includes wärn doch für den anfang nich sechelcht. gibts die irgendwo oder wie is das ?
Folge mal dem Punkt links auf die Tutorial-Seite von Dr. Paul Carter(?) und lade dir dort die zum Tut gehörige zip-Datei herunter. Darin findest du mehrere Header (C + Asm), mit der die Ausgabe über C gemacht wird. Du brauchst allerdings dafür einen C-Compiler (Klick!).
cdecl.h und driver.c bei der c-Main() includen. die "asm_io.inc" mit %include einbinden (in der asm-Datei) und zu einer '.o' File machen ("nasmw.exe -fwin32 meineDatei.asm"), diese zum C-Projekt mit der "asm_io.o" linken. (Projekt/Projektoptionen/Parameter -> Library hinzufügen) und dann compilieren.
mfg
-
zu 1.:
also doch das, was ich mit "binärer befehl-code" gemeint hab
UND ES FUNZT !echt gewieft !
zu 2.:
muss ich mir ma angucken.
also ich hab code gefunden, der dateien wie diese einbindet: (bezüglich win32)include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib
ich würd ja jetzt ma sagen, die sind z.b. für den auruf von funktion wie z.b. MessageBox notwendig. und so gibt es noch jede menge include-dateien, die auch konstanten usw. deklariern. und libs, die den (compilierten) code für eben solche funktionen beinhalten.
...und sowas hatte gemeint.
lw
-
Diese "Include"-Dateien stellen, wie schon gesagt, nützliches zeugs für die windows-programmierung etc in asm dar, sind jedoch kein zwingender bestandteil. Beim fasm, den man übrigens für windows mit einem editor, der sich schon IDE schimpfen darf, bekommt, sind solche includes dabei. wohl bemerkt nur bei der windows-version.
-
sagt ma, so ne REIN THEORETSICHE frage :D:
ich hab ja en bcc55 (c++ compiler ;)). und da sind ja schon libs mit dabei. die könnte ich doch verwenden. der code is ja schon compiliert - folglich müssten die doch genauso funktionsfähig sein.und rein theoretisch könnte ich doch die .h-dateien (ggf. automatisert
) in .inc-dateien konvertieren, oder nicht ?
*hände-reib*lw
-
Klar kannst du die nutzen! Das funzt dann folgendermaßen:
Du schreibst deine Funktionen in asm und assemblierst sie in eine .obj (Format MS COFF). Dann kannst du die mit dem bcc mit den libs zusammenlinken.ich habe keine ahnung, wie das im nasm aussieht, aber fasm ist ähnlich.
format COFF use32 section '.data' writeable msg db "Ergebnis: %i\n",0 section '.text' executable extrn _printf public _add ; int add(int zahl1, int zahl2); _add: ; ebp+8: zahl1, ebp+12: zahl2 push ebp mov ebp, esp mov eax, [ebp+8] add eax, [ebp12] push eax push msg call _printf add esp, 8 mov esp, ebp pop ebp ret
In C/C++ entspricht das dem hier (passt zwar net ganz, aber egal *g*):
int add(int zahl1, int zahl2) { int ergebnis = zahl1+zahl2; printf("Ergebnis: %i\n", ergebnis); return ergebnis; }
-
ach ja .. um das executable zu bekommen, musst du dann erstmal deinen asm-code assemblieren. dabei kommt dann eine .obj raus. die kannst du dann entweder an den bcc32, oder tlink schicken. die machen dann das executable - sofern es sich auch um ein executable handeln soll.
-
ha ok. danke soweit erstmal.
ich les mich da jetzt mal rein und versuch mal die verschiedenen compiler alle zum laufen zu bringen und zu testen. nasm nervt mich gerade ein bischen, aber das bekomm ich bestimmt noch hin.
nen dos-"Hello World"-programm hab ich schon. *freu*
jetzt versuch ich gleich mal ne messagebox frei nach dem motto wer nicht wagt der nicht gewinnt.
das wärs also soweit. und wenn ich wieder fragen hab, weiß ich ja, wohin ich mich melden kann.
lw
EDIT: ich tendier ja jetzt zu tasm. das is wenigstens schön kryptisch
und mit meinen bcc55 kompatiebel.
achja und: meine MessageBox funktioniert!ES ROCKT !
ich liebe assembler...