inline assembler in mvc++
-
kann der c++ inline assembler alles was der masm auch kann?
gibt es unterschiede?
wenn ich code für masm in die __asm Klammern schreine krieg ich immer Fehlermeldungen, also wie krieg ich das zum laufen?
-
_asm eax, esp <-> _asm esp, eax
__asm eax, esp <-> __asm esp, eaxeine von beiden, wie die syntax bei mvc++ ist weiss ich aber nicht.
-
der untere
-
Natürlich kann er das !
denn schliesslich wird der asm teil nicht vom compiler "CL" übersezt, sonder von Assembler "ML", der parser holt diesen teil und übergibt ihn der assembler
der assembler übersezt ihn und der binder fügt das wieder in das *.obj file ein,dann der linker linkt ihn zu *.exe File.also erwarte nicht das du alles machen kannst der schliesslich bist du im Protected Mode und auf Ring 3. also keinen möglichkeit Hardware zu steuern, dafür muss du über "Call Gate" das erledigen.
also das assembler in VC++ ist dafür zustendig b.s.p stack , Heap , aber immer in der LDT des ring 3, kein GDT oder IDT möglich.
weiteren Information Über VC++ Inline Assembler :
Microsoft Specific
*
The inline assembler lets you embed assembly-language instructions in your C and C++ source programs without extra assembly and link steps. The inline assembler is built into the compiler — you don't need a separate assembler such as the Microsoft Macro Assembler (MASM).Because the inline assembler doesn't require separate assembly and link steps, it is more convenient than a separate assembler. Inline assembly code can use any C or C++ variable or function name that is in scope, so it is easy to integrate it with your program's C and C++ code. And because the assembly code can be mixed with C and C++ statements, it can do tasks that are cumbersome or impossible in C or C++ alone.
The __asm keyword invokes the inline assembler and can appear wherever a C or C++ statement is legal. It cannot appear by itself. It must be followed by an assembly instruction, a group of instructions enclosed in braces, or, at the very least, an empty pair of braces. The term "__asm block" here refers to any instruction or group of instructions, whether or not in braces.
The following code is a simple __asm block enclosed in braces. (The code is a custom function prolog sequence.)*
**
// asm_overview.cpp
void __declspec(naked) main()
{
// Naked functions must provide their own prolog...
__asm {
push ebp
mov esp, ebp
sub esp, __LOCAL_SIZE
}// ... and epilog
__asm {
pop ebp
ret
}
}
Alternatively, you can put __asm in front of each assembly instruction:__asm push ebp
__asm mov ebp, esp
__asm sub esp, __LOCAL_SIZE
Since the __asm keyword is a statement separator, you can also put assembly instructions on the same line:__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE**
cu....
-
Original erstellt von <OS-Developer>:
**Natürlich kann er das !
denn schliesslich wird der asm teil nicht vom compiler "CL" übersezt, sonder von Assembler "ML", der parser holt diesen teil und übergibt ihn der assembler
der assembler übersezt ihn und der binder fügt das wieder in das .obj file ein,dann der linker linkt ihn zu .exe File.Kann das erklären, weshalb inline-assembler in inline-funktionen auch fein inline funktioniert? daß der erzeugte code solcher inline-funktionen noch über den optimierer gejagt wird?
-
Also ich habe den MASM garantiert nicht auf meinem Rechner. Auch nicht irgendeine Datei, die danach aussieht (ml.exe oder so). Und trotzdem funktioniert inline assembler mit vc++.
Der Borland Compiler hingegen braucht den TASM zum übersetzen von inline assembler, vielleicht verwechselst du das.
-
Original erstellt von DrBassS:
**kann der c++ inline assembler alles was der masm auch kann?
gibt es unterschiede?
**Nein und ja.
Der inline-assembler von VC ist einzig und allein dazu da, assemblercodestücke zu übersetzen. Man kann dem Inline-ASM von VC keine MASM-Direktiven etc geben sondern nur Assemblerbefehle. Ich denke das ist der Grund,w arum deine MASM-Progs dadrin nicht laufen. Der Inline-ASM ist halt wirklich nur dazu da, in Funktionen etc. Assemblercode zu übernehmen. Es wäre auch äußert unpraktisch, wenn ein Stück inline-assembler irgendwelche segemnte oder so vorschlägt, wobi der C-Compiler sich doch um die ganze Organisation kümmern soll
[ Dieser Beitrag wurde am 02.10.2002 um 16:35 Uhr von TriPhoenix editiert. ]