Die Community zu .NET und Classic VB.
Menü

Visual Basic und Assembler - Seite 7

 von 

Ihre Meinung  

Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 14 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Jan de Kloe am 01.05.2011 um 18:04

I have noticed that on return from my Assembler routine, the error 6 (Oveflow) is raised when a floating point instruction hit an invalid value. The same FLPT instruction in 8087 would not cause an interrupt on the wrong format of the data. An example would be an FLD of 0D 00 00 00. This is interpreted as zero in 8087 but gives an overflow error in 80386 and above. Is there a way to handle this in a compatible way? German is OK.

Kommentar von Jan de Kloe am 01.05.2011 um 17:53

Heute Email geschickt an Tutorial@ActiveVB.de mit Frage.
Jan

Kommentar von Udo Schmidt am 14.01.2008 um 03:48

Jan de Kloe,

sorry for anwering that late. I don't log on here very often (@admins: perhaps it was a good idea to forward notices automatically to the author!?).

Since VB locates memory at runtime, the general problem with using a data section is that you don't know its start address when loading your code into an array. Nevertheless, you can define data even with the sample code by using DB, DW and DD and entering something like this:

prg: call prg_1
prg_1: pop eax
lea esi,[eax + OffSet MyData - OffSet prg_1]
...
...

restore esi

...

MyData: DB x as y
data_1: DD 12345678h

I think, there is an accordingly explanation in the tutorial.


Of course, this isn't very comfortable. Therefore, you may want to change the sample loading routine this way:
- read the data section the same way the code section is read
- read the allocation section and do the windows loader's job in a VB-loop

But this was much too complicate for a tutorial...

Hope, this answers your questions. Otherwise, don't hesitate to send me an e-mail (udo@activevb.de).

Udo

Kommentar von Jan de Kloe am 14.09.2007 um 18:31

I would like to use the mechanism you propose for executing assembler in VB (EXE2ASM). The sample program runs but my own program has also a data section and is rejected. Would it be possible to have an EXE with two sections? What is the restriction?
Also the parameter passing from VB to Assembler is not very clear in the document (equ PA1). From the hex code I cannot make out what is exactly happening.
(German is OK)
Jan

Kommentar von Mark am 24.09.2006 um 14:51

ganz toller Artikel .. das Beste, was ich seit Jahren gelesen habe.

vielen Dank !



Kommentar von Ronald Grilletz am 23.07.2006 um 22:57

Sind die in den v.g. genannten Beispiele für Programmierungen auch für AMD Prozessoren anwendbar. Ich habe eine AMD K6/2 als Prozessor und versuche ein Steuerungsproramm für eine digitale Steuerung von ISA - I/O Karten zu entwickeln. (Modelleisenbahn)

Kommentar von Ralf Boguslawski am 01.10.2005 um 10:45

Eine wirklich hervorragende Einführung, wie Assembler in VB-Programme eingebunden werden kann.

Eine (vieleicht wichtige) Kleinigkeit sollte noch hinzugefügt werden:
Zur Adressierung des Stacks kann außer (E)BP noch jedes andere Index- oder Basisregister z.B. (E)BX verwendet werden. Und zwar in der Form:

Test PROC NEAR
mov EBX,ESP
.
.
mov EAX,DWORD PTR SS:[EBX+4] ;1. Parameter nach EAX
.
.
ret xx
Test ENDP


Vorteil: (E)BP muß am Anfang nicht gesichert bzw. am Ende nicht wiederhergestellt werden ( sehr beliebter Fehler!).

Nachteil: (E)BX ist standardmäßig DS zugeordnet; folglich muß durch einen so genannten Segmentoverride bekanntgemacht werden, daß (E)BX nun SS zugeordnet ist (s.o.).
Dieser Segmentoverride führt bei Routinen, die viel auf den Stack zugreifen, zu einer Verlangsamung um Faktor 10 und mehr (eigene Erfahrung!!!!). Das gesamte Programm wird langsamer, als dasselbe Programm in reinem VB.

Fazit:
Bei Routinen, die intensiv auf den Stack zugreifen, immer(!!!) (E)BP zur Adrssierung des Stacks verwenden. Das erspart viel Frust.

Kommentar von Uwe Köppel am 06.09.2005 um 11:16

Ich suche nach einem VB Code der Windows XP Prof aus dem
Ruhezustand hochfahren lässt.
Wenn Sie mir damit weiter helfen könnten, wäre ich Ihnen
sehr dankbar.

Mit freundlichen Grüssen

Uwe Köppel

Kommentar von raven am 05.07.2005 um 16:17

der beitrag hat mir als asm neuling super weitergeholfen, habe aber trotzdem noch fragen
ich will in einer DLL einen übergebenen string ausgeben
ich hab erfahren das strings nicht direkt übergeben werden sondern nur ihre zeiger
für mich heisst das:

mov eax,[esp+8]
mov sTest,eax
invoke Messagebox, 0, offset sTest, offset sInfo, MB_OK


aber irgendwie nich so wirklich
bin für jede hilfe dankbar

Kommentar von Ken Snyder am 12.12.2004 um 06:44

Ich sage es ja immer: Assembler ist der wahre Jakob und
sonnst NIX. Ich schreibe alle meine Treiber für alle
Plattformen nur in asm und wenn mal ne gui gebraucht wird
dann nehm ich c++, aber _asm ist das beste...

Kommentar von DonDave am 22.09.2004 um 11:33

Leichter kann es einem nicht gemacht werden. Ich bin glücklich. Danke!!

Kommentar von Chris Fuchs am 30.07.2004 um 14:58

Super, habe ich schon gut verwenden können, aber ...

wie wird sich die neue NX-Technik (non executable im data-segment) auf diese integrierten Maschinensprachestückchen auswirken ?

Kommentar von Günter Steingroewer am 16.02.2004 um 11:10

Klasse, kann mir sicher ein Stück weiter helfen.

Kommentar von f0x am 17.12.2003 um 19:49

Klasse!
Eine gut verständliche Einführung in das Thema mit passenden weiterführenden Links.

Ganz grosses Lob!