Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ein- /Ausgaben in asm

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 06.05.2006, 20:25    Titel: Ein- /Ausgaben in asm Antworten mit Zitat

Hallo,

ist es möglich (wie) in FreeBasic in Assembler Ausgaben und ev. auch Eingaben (wie Print und Input) zu machen? Über die DOS-Interrupts geht es ja nicht. Wie könnte man das machen? Da man nicht aus einem asm-Block herausspringen kann wäre es noch praktisch.

Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 06.05.2006, 21:41    Titel: Antworten mit Zitat

compile doch einfach mal PRINT "Hallo" und sag dem compiler dasser die ASM-Files da lassen soll? (referenz -> der compiler)
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 07.05.2006, 08:02    Titel: Antworten mit Zitat

Man kann Freebasic und Asembler Code Problemlos mischen:
http://de.wikibooks.org/wiki/FreeBasic:_ASM_Beispiele
Nur ist es witzlos, weil die Text ausgabe viel länger dauert als jegliche berechnung.

@MisterD
Finde ich keine Gute Idee, bei jedem Compiler Update muss man das erneut betreiben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 07.05.2006, 08:24    Titel: Antworten mit Zitat

Klar, wie man asm-eile schreibt weiss ich schon. Es geht hier aber um Print und Input-Befehle in asm geschrieben.
Ich versuchte so zu kompilieren, habe es jedoch nicht geschafft. Ich klickte "Parameters" an und gab -R oder R ein, wie in der Referenz steht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 07.05.2006, 09:02    Titel: Antworten mit Zitat

Code:
a=500

ASM
    NOP
END ASM
? "Hallo Welt"
ASM
    NOP
END ASM
? a
ASM
    NOP
END ASM

wird zu
Code:
   .intel_syntax noprefix

   #C:\FreeBASIC\asm.bas' compilation started at 08:56:45 (FreeBASIC v0.15b)

.section .text
.balign 16

.globl _main
_main:
push ebp
mov ebp, esp
and esp, 0xFFFFFFF0
push ebx
push esi
push edi
call ___main
push dword ptr [ebp+12]
push dword ptr [ebp+8]
call _fb_Init@8
call _fb_CallCTORS
.Lt_0001:
mov dword ptr [_Ai], 500
NOP
push 1
push 10
push offset Lt_0003
call _fb_StrAllocTempDescZEx@8
push eax
push 0
call _fb_PrintString@12
NOP
push 1
push dword ptr [_Ai]
push 0
call _fb_PrintInt@12
NOP
.Lt_0002:
push 0
call _fb_End@4
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
   #C:\FreeBASIC\asm.bas' compilation took 5.15149271789639e-004 secs
   #global initialized constants

.section .data
.balign 16
.balign 4
Lt_0003:   .ascii   "Hallo Welt\0"
   #global non-initialized vars

.section .bss
.balign 16
.balign 4
   .lcomm   _Ai,4

Die NOP Befehle helfen bei der Orentierung im Code.
Nur Einstellung für den Compiler:
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 08.05.2006, 17:25    Titel: Antworten mit Zitat

klasse Trick Michael,
hab auch schon in asm-Listings lange nach meinem asm-Code gesucht.
Da FB kaum NOP verwendet (mir ist noch keins untergekommen) ist ein eingeschobenes
Code:
ASM NOP
eine gute Suchhilfe.

@c.m.obrecht,
Input, Print und andere Basic-Standard-Befehle sind in InlineASM wirklich fehl am Platz, das kann FB (bzw. die C-Runtime) viel besser.
Nur zu Lernzwecken würd ich, wie Michael es schreibt, mir den ASM-Code des FBC ansehen. zwinkern

Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 09.05.2006, 09:37    Titel: Antworten mit Zitat

Vielen Dank, werde das einmal ausprobieren; es ist auch zu Lernzwecken interessant, einmal mit Assembler unter Windows zu arbeiten statt mit masm.
Ich habe FB-Programme schon im Disassembler angesehen, der eigene asm-Code ist richtig versteckt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.05.2006, 17:33    Titel: Antworten mit Zitat

@c.m.obrecht
Freebasic ist eigentlich ein schlechtes Anschaungsmaterial für Asembler unter Windows.
Die Befehle Print und Input sind Subroutinen, die ihre Resultate in einem Speicherbereich hinterlassen. Was die Subroutine wirklich macht, bleibt weitgehent im dunkeln (hier für musste man den Freebasic Quellcode analysieren).
Besser wäre eben ein Tutorial, das genau um Windows und Asembler geht.

@volta
Den NOP Befehl kenn ich von Microcontroller System und fand es in dem Fall gleich praktisch, damit ich nicht suchen muss.
Schön das es auch dir hilft.
Ich bin allgemein immer wieder darüber erstaunt, welch schönen Asembler Intel entwickelt. (Ich vergleiche 80C51 und x86 mit dem Asembler von PIC's)
Auch witzig ist, wie Microcontroller Erfahrung sich auf Computer übertragen lassen.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 10.05.2006, 11:57    Titel: Antworten mit Zitat

Ja genau, ich habe im Disassembler/Debuger gesehen welch langen Assemblercode herauskommt; das Programm disassembliert auch Programmteile aus Bibliotheken etc. und es sind einige DLLs vorhanden.
Der selbstgeschriebene ASM-Code ist damit schierig zu finden und das Programm wird um einiges länger, unglaublich viel Code. Nur bei Assemblerprogrammen unter DOS bleiben sie klein lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 11.05.2006, 15:01    Titel: Antworten mit Zitat

Ich habe es nun geschafft eine Variable auszugeben; jedoch "print "Hallo..." in asm habe ich nicht geschafft, wie auch die Input-Befehle welche ich mit der obengenannten Methode erhalten habe. Wie muss man die eingeben?
Wenn man .section.data eingibt kommt eine Fehlermeldung vonwegen ".section .eata"; handelt es sich hierbei um einen Fehler in FB?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.05.2006, 17:55    Titel: Antworten mit Zitat

Es handelt sich ganz sicher nicht um einen Fehler von Freebasic, weil du greifst ja in den Normallen Ablauf ein.
Was du programmierst ist kein reines Asembler, du rufst ja dauernt Freebasic Funktionen auf.
(Wenn auch über Call)
Wie die genau diese Funktionen über Asembler angesprochen werden ist nicht dokumentiert. Wieso denn auch? Die Funktionen werden ja nur vom Compiler aufgerufen.

Offensichtlich weisst du nicht, was du machst.
Bei allem was mit _fb_ begiennt, steckt irgendwas Freebasic spezifisches dahinter.

Was du hier machst, er gibt auch nicht viel sinn, der Asembler Code den du ihn Freebasic schreibst, kann nur von Freebasic überstetzt werden, weil nur Freebasic die aufgerufen Unterprogramme hat.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 11.05.2006, 19:58    Titel: Antworten mit Zitat

Ja klar, ich versuchte es auch in Freebasic zu "kompilieren" Natürlich geht das so nicht mit einem anderen Assembler
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 12.05.2006, 17:02    Titel: Antworten mit Zitat

Okey, dann helf ich dir weiter:
Code:
a$="Hallo Welt"
asm Nop
? a$
ASM NOP
sleep


Hier gibt es den Code:
Code:
a$="Hallo Welt"

asm
    push 1
    push offset a$
    push 0
    call _fb_PrintString@12
end asm

sleep


Nun zu Input:
Code:

asm NOP

input a$

asm NOP

? a$

sleep


gibt
Code:
dim a$
b$=""
ASM
    push -1
    push 0
    push 0
    push offset b$
    call _fb_StrAllocTempDescZEx@8
    push eax
    call _fb_ConsoleInput@12
    push 0
    push -1
    push offset a$
    call _fb_InputString@12
END ASM

? a$

sleep


Ergibt:
Code:
dim a$
b$=""
ASM
    push -1
    push 0
    push 0
    push offset b$
    call _fb_StrAllocTempDescZEx@8
    push eax
    call _fb_ConsoleInput@12
    push 0
    push -1
    push offset a$
    call _fb_InputString@12
   
    push 1
    push offset a$
    push 0
    call _fb_PrintString@12
END ASM

sleep

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 12.05.2006, 20:39    Titel: Antworten mit Zitat

Super, vielen Dank!
Wie funktioniert Input mit numerischen Werten? Habe ich nicht hinbekommen.
Bei meinen vorherigen Versuchen sollten die Variablen im asm definiert werden; da erschien die Fehlermeldung wegen ".section .eata" statt Data; darum meinte ich ob ein Fehler in FB sei, dass es eata statt data liest.

Die ganzen asm-Codes auch für die aufgerufenen Unterprogramme wären auch interessant (Besonders um mit dem Disassembler zu arbeiten) aber ich muss mir am besten einmal ein Buch über Assembler unter Windows zulegen; ich habe eines aber das behandelt DOS-Programme.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 13.05.2006, 09:00    Titel: Antworten mit Zitat

Variablen deklariert mal halt noch immer in Basic zwinkern.

Code:
dim a as integer

ASM NOP
Input a
ASM NOP

? a
sleep

gibt
Code:
dim a as integer
Dim b$
b$=""
ASM
    push -1
    push 0
    push 0
    push offset b$
    call _fb_StrAllocTempDescZEx@8
    push eax
    call _fb_ConsoleInput@12
    push offset a
    call _fb_InputInt@4
END ASM

? a
sleep


Oder auch:
Code:
dim a as single

ASM NOP
Input a
ASM NOP

? a
sleep

gibt
Code:
dim a as single
Dim b$
b$=""

ASM
    push -1
    push 0
    push 0
    push offset b$
    call _fb_StrAllocTempDescZEx@8
    push eax
    call _fb_ConsoleInput@12
    push offset a
    call _fb_InputSingle@4
END ASM

? a
sleep

Interresant, wie viele Input's Freebasic hat.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 13.05.2006, 13:54    Titel: Antworten mit Zitat

Super!! Danke.
Ja, das Deklarieren geht besser in Basic lächeln
Gibt einige Inputs; gut zu wissen dass für "single" ein anderer Code benötigt wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz