Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 06.05.2006, 20:25 Titel: Ein- /Ausgaben in asm |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.05.2006, 21:41 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.05.2006, 08:02 Titel: |
|
|
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 07.05.2006, 08:24 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.05.2006, 09:02 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.05.2006, 17:25 Titel: |
|
|
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 eingeschobeneseine 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.
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 09.05.2006, 09:37 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.05.2006, 17:33 Titel: |
|
|
@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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 10.05.2006, 11:57 Titel: |
|
|
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  |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 11.05.2006, 15:01 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.05.2006, 17:55 Titel: |
|
|
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 11.05.2006, 19:58 Titel: |
|
|
Ja klar, ich versuchte es auch in Freebasic zu "kompilieren" Natürlich geht das so nicht mit einem anderen Assembler |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 12.05.2006, 17:02 Titel: |
|
|
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 12.05.2006, 20:39 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 13.05.2006, 09:00 Titel: |
|
|
Variablen deklariert mal halt noch immer in Basic .
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 13.05.2006, 13:54 Titel: |
|
|
Super!! Danke.
Ja, das Deklarieren geht besser in Basic
Gibt einige Inputs; gut zu wissen dass für "single" ein anderer Code benötigt wird. |
|
Nach oben |
|
 |
|