Problem mit RadASM



  • Also in der DOSBox läufts leider auch nicht.
    Hier ist mal die Datei:
    http://www.file-upload.net/download-2346228/first.exe.html

    Vielleicht könnt ihr mir ja helfen=)

    Aber ich habe mich jetzt auf jeden Fall mal entgültig für den FASM entschieden, da der NASM ja doch nicht sooo gut sein soll, und den MASM wollt ich eigentlich sowieso nie, da er ja von Microsoft ist und so:-P

    Hab auch schon eben mal ein Tutorial für den FASM durchgemacht, zwar nur in 16-Bit für DOS, aber macht ja erst mal nix, und probiert ein Programm zu erstellen, leider kompiliert er mir es nicht, vielleicht könnt ihr hier auch den Fehler finden:

    org 100h
    jmp after_data
    outmsg1 db "Bitte gebe eine Zahl ein: $"
    outmsg2 db "Bitte gebe eine zweite Zahl ein: $"
    outmsg3 db "Das Ergebnis lautet: $"
    z1	dd 0
    erg	db 0
    
    after_data:
    mov dx, outmsg1
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    int 21h
    mov z1, dx
    mov dx, outmsg2
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    int 21h
    mov ax, z1
    add ax, dx
    mov erg, ax
    mov dx, outmsg3
    mov ah, 09h
    int 21h
    mov dx, erg
    mov ah, 09h
    int 21h
    ret
    

    Und zwar soll die zeile mov z1, dx nicht ok sein.

    Schonmal vielen Dank.

    Bin jetzt auf jeden Fall mal froh mich endlich nach einigem rumprobieren für einen Assembler entschieden zu haben=)

    Gruß freeG



  • dd <=> DX ⚠



  • Upsss, klaaar, hatte erst b, das ging net klar ist ja au nurn byte.
    Dann hab ich ausversehen danach word und und doubleword verwechselt:D:D
    Und die eckigen Klammern hab ich auch vergessen, er assembiliert es zwar, jedoch klappt die Ausgabe des Ergebnises leider noch nicht...
    Vielleicht kann mir einer helfen=)

    org 100h
    jmp after_data
    outmsg1 db "Bitte gebe eine Zahl ein: $"
    outmsg2 db "Bitte gebe eine zweite Zahl ein: $"
    outmsg3 db "Das Ergebnis lautet: $"
    input1     dw 0
    input2     dw 0
    
    after_data:
    mov dx, outmsg1
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    int 21h
    mov [input1], dx
    mov dx, outmsg2
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    int 21h
    mov [input2], dx
    mov ax, [input1]
    add ax, [input2]
    mov bx, ax
    mov dx, outmsg3
    mov ah, 09h
    int 21h
    mov dx, bx
    mov ah, 09h
    int 21h
    ret
    

    gruß freeG



  • Das Problem bei deinem letzten Tutorial liegt im Assembler-Teil. Es wird ein korrektes win32-Programm erzeugt, die c-standard-libs wurden scheinbar auch korrekt eingebunden, jedoch geht bereits der erste call (wohl ein printf fuer "Erste Zahl eingeben") in die Pampa.

    Zu deinem aktuellen Problem:
    Ueberleg dir, was int 21h, Funktion 9 macht (Tipp: Gibt den String bei ds:dx aus, bis ein "$" darin vorkommt) und schau dir dann nochmal an, was du da eigentlich programmiert hast... 🙂

    edit:
    Da faellt mir auf: Schau dir bei der Gelegenheit am besten gleich auch nochmal an, was eigentlich int 21h, Funktion 0ah macht. Sehr wahrscheinlich nicht das, was du erwartest. Vielleicht wolltest du eigentlich sowas wie int 21h, Funktion 01h haben?

    eine gute Interrupt-Liste findest du zB. hier



  • Ja ich hab kein "$", wenn ich das aber dranhänge mit add, dann gehts auch nicht.
    Vermutlich weil int 21h funktion 9 eine zeichenkette ausgibt.
    Wie kann ich denn die Zahl in ne Zeichenkette umwandeln

    EDIT:

    Funktion 01 gibt aber das Zeichen doch sofort aus oder?
    Will ja nur zwei Zahlen einlesen und das Ergebnis ausgeben...



  • add addiert 2 Zahlen. Wenn du auf eine Zahl den char ""addierst,wirddarauswedereinString,nochhaengstduandiesendamitdenchar"" addierst, wird daraus weder ein String, noch haengst du an diesen damit den char "" an.

    Zu int in String umwandeln gibt es einen Haufen Quellen. Wurde zB. hier zuletzt ausfuehrlich diskutiert.

    Funktion 01h liest ein Zeichen von stdin und gibt es in stdout aus. Das eingelesene Zeichen wird zudem in al zurueckgegeben. Kannst du also benutzen, um zwei einzelne Ziffern einzulesen. Willst du Zahlen mit mehreren Ziffern einlesen, musst du sie zuerst als String einlesen. Dazu kannst du Funktion 0ah benutzen - ist aber schon etwas Aufwand. Danach musst du diese Strings dann in Integer umwandeln. Funktioniert intuitiv genau wie die Umkehrung von int->String. Bei einer einzelnen Ziffer beschraenken sich diese Umwandlungen fuer String->int auf eine Substraktion von 0x30 (="0")...

    ... kleinen Taschenrechner macht man gern mal in Hochsprachen. In Assembler ist das IMHO aber eher ein Thema fuer fortgeschrittenere.



  • okidoki, danke schön
    Dann werd ich wohl erst mal noch n paar Tutorials durchmachen und einfachere Sachen probieren;-)

    EDIT:

    Ich finde irgendwie keine gescheiten deutschen Tutorials, weder FASM noch NASM...=(

    Danke gruß freeG



  • Ich würde mir schnell noch die letzten Bücher mit Grundlagen besorgen, falls bald alle Assemblerbücher vergriffen sind.
    Die Asm-Beispiele bei Jeremy Gorden sind ganz gut
    http://www.jorgon.freeserve.co.uk/
    und in der Archiv-Abteilung hier, gibt es ebenfalls gute Texte und Links.

    Unter Linux konnte ich nicht annäherend so ein Spaß machendes Programm
    wie Debug finden. Wenn man apt-cache search assembler macht, werden einem
    jedoch interessante Dinge angezeigt, wie yasm oder so.



  • Nicht wirklich ueberraschend. Aus meiner Sicht stellt sich die Materialverteilung fuer Assembler-Einsteiger auf dem PC in etwa so da:

    Am meisten gibt es wahrscheinlich noch immer fuer TASM/DOS.
    Ziemlich viel gibt es fuer MASM/Win32.
    Recht wenig fuer NASM/DOS/Win32, wird aber immer mehr (vor ca. 5 Jahren konnte man noch praktisch gar nichts dazu finden)
    Ein wenig was fuer die Bin-Utils/GAS.
    Der Rest erschoepft sich so ziemlich in mehr oder weniger brauchbaren Anleitungen und einigen Beispielcodes oder HowTos fuer ein "Hallo Welt!".

    Wenn du als weiteres Ausschlusskriterium die Deutsche Sprache anbringst, darfst du die Zahl der Texte gleich noch mit hoechstens 0.75 multiplizierten.

    Du musst dir also mal darueber klar werden, was du willst:

    Willst du jetzt einen aktuellen "besten Assembler" fuer dein OS benutzen? Dann kannst du dir irgendein gutes Assembler-Buch oder -Tutorial fuer dein OS nehmen, musst aber fuer die Verwendung mit deinem ausgesuchten Assembler abstrahieren koennen. Dh. vor allem auch bereits Erfahrung mit der ungefaehren Struktur eines Assemblerprogramms, den syntaktischen Eigenheiten und der Bedienung deines Assemblers (zu erfahren aus dessen Dokumentation und Beispielcodes), sowie allgemein mit der Funktion und Bedienung der Konsole, Linker und Compiler haben.

    oder

    Willst du einen rundum durch einen Text begleiteten Einstieg? Dann musst du mit der Auswahl an Tools, die der Autor getroffen hat, leben und bis du etwas Sicherheit im Umgang mit den Tools hast, seinen Beschreibungen genau folgen.
    Das kann dann eben auch bedeuten, dass du zunaechst nicht die aktuellsten oder besten Tools benutzen kannst und etwas Aufwand betreiben musst, um zB. noch einen TASM aufzutreiben, oder eine VM mit Linux oder DOS aufsetzen und den Umgang damit lernen. In dem Fall waere eben vor allem wichtig, dass du einen Text findest, bei dem du beim Ueberfliegen das Gefuehl kriegst, dass du dabei wirklich verstaendlich etwas ueber Assembler lernst, das dich weiter bringt (habe ich schon auf Seite 1 geschrieben).



  • Genau, ich finde du hast mein Problem genau getroffen;-)

    Ich habe jetzt zum Beispiel ein echt gutes Tutorial gefunden, also es sieht wie ich finde sehr gut aus, auch umfangreich und der Anfang ist sehr verständlich.
    Das kleine große Problem, dort wird der TASM, verwendet.
    So daher benötige ich jetzt den TASM, da ich mir jetzt wie du sagtest dieses Tutorial rausgesucht habe.
    Jedoch finde ich einfach nirgends den TASM.
    Ich hab nur gelesen, er war früher kostenpflichtig, mittlerweile wird er nicht mehr von borland vertrieben.
    Aber anscheinend kann man ihn jetzt kostenlos laden, falls man ihn findet.

    Habt ihr vielleicht Tipps für mich wo es ihn gibt, oder ihn sogar selber aufm Rechner und könnt ihn mir per email oder so schicken=)

    Gruß freeG
    und schonmal vielen Dank;-)=)



  • Zum einen bekommst du wahrscheinlich auf gewissen Online-Auktionshaeusern o.Ae. noch guenstig gebrauchte legale Originalkopien vom TASM 4 oder 5, zum anderen findest du bestimmt auch anders eine Kopie, wenn du dich ein wenig mit der Welt des p2p und online vaults beschaeftigst z.B.... Mehr kann ich dir hier zu dem Thema allerdings nicht sagen.



  • Mhh ok, ich habe gehört soll beim Turbo C++ Explorer dabei sein.
    Den hab ich mir jetzt auch geladen, das Problem, ich brauch nen key.
    den gibts anscheinend auf http://www.embarcadero.com/downloads
    aber ich raff net wos einen Code geben soll.
    Vll kennt sich jemand aus und kann mir helfen;-)

    EDIT:
    Hab noch ein Problem...ich hab jetzt den TASM, kann ihn aber nur über die DOSBox installieren, das Problem, dort muss ich das Windows Verzeichnis angeben, kann ich aber leider nicht, da er ja als C: Standard verzeichnis das verzeichnis nimmt wo die install.exe ist.
    Gebe ich dann C:\Windows an, macht er in dem Ordner ein neuen Windows ORdner, und da fehlt ihm ja dann die system.ini und so....

    Kann mir vll jemand helfen?
    Gruß freeG



  • mannamanna schrieb:

    Unter Linux konnte ich nicht annäherend so ein Spaß machendes Programm wie Debug finden. Wenn man apt-cache search assembler macht, werden einem jedoch interessante Dinge angezeigt, wie yasm oder so.

    😕
    Verstehe nicht diese Rigidität gegenüber Linux Entwicklungs-Tools. "yasm oder so" ist Quatsch. Es gibt unter Linux für alles "eigene" Tools. Man muss nicht extra von irgendwo irgendwelche "Schurken"-Tools dazuinstallieren. Noch mal: Ja, es gibt unter Linux "eigene" Tools. ...

    Ja, es gibt sie wirklich.

    Frei.

    Ja, freie Tools! Nix bezahlen. Nix illegal herunterladen.



  • Falls jemand jetzt noch was fragen möchte, ob diese Linux-Tools dieses oder jenes können:

    Ja, das können sie! Dieses und jenes können sie! Ja, dieses und jenes und mehr!



  • fr33g:
    Sehe irgendwie dein Problem nicht...
    Ich habe gerade mal die DOSBox rausgekramt, um ganz sicher zu gehen. Habe also meine drei Disketten-Backups von TASM in einen Ordner kopiert und install.exe gestartet, welches ein DOS-Programm ist und deshalb auch nur auf einem DOS-System laeuft (also z.B. in der DOSBox).
    Alles was bei mir passierte, als ich das nicht existierende Verzeichnis "C:\WINDOWS" fuer Windows bei der Installation angegeben habe, ist, dass er den angegebenen Pfad angelegt und irgendeinen Mist darin abgelegt hat, sowie eine dll-Datei statt im Windows-System-Ordner im bin-ordner von TASM gelandet ist. Letzteres passiert aber nur, wenn du die Windows-Tools mit installierst.
    Nichts weiter, danach war die Installation mit einem netten Hinweis ueber das ziemlich Windows-freie Windows-Verzeichnis erfolgreich abgeschlossen. Die DOS-Tools, mit denen du wahrscheinlich hauptsaechlich arbeiten willst, funktionierten jedenfalls einwandfrei. Den angelegten "Windows"-Ordner solltest du ohne Probleme loeschen koennen. Die Windows-Versionen von TASM (TASM32, TLINK32) sollten trotzdem ohne Probleme laufen und es dir ermoeglichen, deine Programmme wenigstens ausserhalb der DOSBox in Windows zu erstellen (um der Frage vorzubeugen: d.h. nicht, dass deine DOS-Programme dadurch magisch zu Windows-Programmen werden).

    Edit:
    Wenn du dich mal etwas in die DOS-Box-config einarbeitest (starte z.B. bei der FAQ auf dosbox.com), kannst du dir auch ein autoexec-script erstellen, dass nicht nur das keyboard-layout beim Start auf Deutsch umschaltet, sondern auch gleich verschiedene Ordner oder Festplatten mountet.
    Ist mittelfristig denke ich fuer Programme wie dieses Install oder die DOS-Versionen von TASM oder TD, die Parameter erwarten, zweckmaessiger als deine Drag&Drop-Methode und beschraenkt dich auch nicht nur auf das Verzeichnis in dem das Programm liegt, das du auf diese Weise startest.

    @abc.w:
    Mehr als es vorschlagen kannst du nicht tun...
    ...oder zumindest waere es besser, also halt an dich. 😃



  • Hey nobuo t
    Ich probier das ganze morgen früh nochmal, vll hab ich auch die Meldung wegen dem Windows freien Windows verzeichnis falsch interpretiert und dann die tasm32 und tlink32 Dateien übersehen.
    Melde mich morgen früh dann nochmal:-)

    Auf jeden Fall danke für deine Mühe
    Gruß freeG



  • Guten morgen:-P,

    also ich habe es jetzt noch einmal probiert und siehe da, es funktioniert tatsächlich:-P.
    Jetzt kann ich endlich das TASM Tutorial durchmachen und mich mal besser mit Assembler beschäftigen, als mit der Wahl bzw Such eines Assemblers=)

    Funktioniert alles, die TASM32 und TLINK32, sowie die TASM und TLINK in der DOSBox.

    Vielen Dank nochmal für die Mühe von allen;-)

    Gruß freeG


Anmelden zum Antworten