WinFuture-Forum.de: [gelöst] SW-Entwicklung in VirtualPC2007/DOS - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[gelöst] SW-Entwicklung in VirtualPC2007/DOS Fehler beim Übersetzen von Quell- in Zielcode


#1 _nobido_

  • Gruppe: Gäste

geschrieben 26. April 2015 - 14:03

Hallo Leute,

bin nicht recht sicher wo es hinein gehört. Deshalb eröffne ich mal in diesem Thread.


Per VirtualPC2007 habe ich mir ein System mit MSDOS 6.22 aufgesetzt, um den TASM 5.0 (Turbo-Assembler, vllt. kennt es ja wer *fg*) von Borland laufen zu lassen.


Folgendes Problem: Der Zielcode scheint fehlerhaft übersetzt zu werden. Ein Interrupt-Aufruf (int21) wird im Zielcode zu int15. Hab es mir per Debugger angeguckt.

Per Suchmaschine werd ich hierzu nicht schlauer. Und in meiner (noch bescheidenen) Literatur zum Thema Assembler werd ich auch nicht fündig - was aber daran liegen könnte dass das Aktuellste aus 2006 stammt :)

Der Quellcode:
Angehängtes Bild: proc.jpg

Der Zielcode (im Debugger)
Angehängtes Bild: procz.jpg

Gehe ich per Einzelschritt durch das Programm, wird alles korrekt ausgeführt. Nur wird das Programm eben nicht beendet.
Der fehlerhafte int15 wird abgearbeitet - ohne sichtlichen Effekt. Dann wird der Loop nochmals (zwei mal) ausgeführt. Und danach nix mehr.... Der Debugger läuft zwar weiter und führt irgendwas aus - allerdings ohne Effekt.

Wird die Exe-Datei an der Eingabeaufforderung gestartet, so wird die Ausgabe der Strings korrekt ausgeführt. Das Programm aber nicht beendet, sondern die Schleife, wie im Debugger, zwei mal durchlaufen. Und dann passieren verschiedene Dinge: Entweder gibt VirtualPC einen Fehler (Fehlercode 315 --> nicht fündig geworden) aus, oder die VM friert ein (ein Gefühl wie echtes DOS ohne VM)

Und nun meine eigentliche Frage: Warum? Also, warum wird das Programm (für mich offensichtlich) fehlerhaft übersetzt? Gibt es da Probleme bzgl. MSDOS & TASM in einer VM?


joar
nettes Rest-Wochenende wünsch ich an dieser Stelle.

Dieser Beitrag wurde von nobido bearbeitet: 26. April 2015 - 19:31

0

Anzeige



#2 Mitglied ist online   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.797
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 26. April 2015 - 15:42

Schwer zu sagen.

Habe es bei mir mal kurz mit dem TASM 5 getestet, welches man von hier bekommt.

Habe es allerdings in DOSBox getestet, da VirtualPC2007 bei mir nicht laufen würde (Windows 8.1).

Der Test hat aber soweit funktioniert. Im Debugger erscheint bei mit int21 an der Stelle, wo bei Dir int15 zu lesen ist. Das Programm läuft auch soweit durch und beendet sich normal.

Tja, ist jetzt schwer zu sagen, warum bei Dir da int15 anstelle von int21 erstellt wird.

Eventuell kannst Du ja anstelle von dem veraltetem VirtaulPC eine aktuelle Version von VirtualBox verwenden. Da kann man auch DOS installieren. Ob das allerdings das Problem löst, kann ich nicht sagen.
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#3 _nobido_

  • Gruppe: Gäste

geschrieben 26. April 2015 - 18:51

Nein. VBox bringt leider nichts. Selber Fehler. Abhilfe geschaffen hat aber die explizite Angabe von int21h. Unter VBox als auch VirtualPC.

Keine Ahnung warum, aber diese Zeile wird ohne das h immer fehlerhaft übersetzt; die int-Angabe fällt IMMER um 6 kleiner aus im Zielcode.... int21 --> int15, in20 --> in14 oder aber int22 --> int16.


Zur VBox: Bekomme leider in der VBox keine Konfiguration von MSDOS hin mit mehr als ca. 590KB freiem Hauptspeicher. In VirtualPC schaff ich immerhin 622KB freien Hauptspeicher. Ist jetzt sicher nicht das Problem, aber es ist mir so nebenbei aufgefallen.

Auf längere Sicht suche ich dann aber auch eine Entwicklungsumgebung/IDE für Windows. Die Microsoft-Version des MASM für Windows setzt VisualStudioExpress 2005 voraus. Mag ich mir aber nicht wirklich parallel zur VS-Version 2010 installieren.

Hatte da vor kurzem noch eine andere Windows-IDE gefunden, der Name ist mir leider entfallen, aber die lies sich nicht installieren.

Falls da jmd. einen Hinweis/Tip hat, was genutzt werden könnte... immer her damit.


<Hmpf>. Mehr fällt mir grad auch nicht ein.

@DK2000: Danke für die Mühe!
0

#4 Mitglied ist online   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.797
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 26. April 2015 - 19:00

Ach, siehst, dass habe ich gar nicht gesehen und beim Abschreiben automatisch das h geschrieben. :blush:

Ja, jetzt ist alles klar.

Das 'h' bedeutet hier, dass die 21 ein Hexwert ist. schreibt man nur 21, dann wird die 21 als Dezimalwert interpretiert und dieser wird dann wiederum in Hex umgewandelt: Aus 21 wird 15h.

Ja, jetzt macht das Sinn. Auf diese Kleinigkeit habe ich gar nicht geachtet.

---

Was VirualBox un DOS angeht, so verhält sich das wie bei einem normalen PC. Du musst die Config.sys und Autoexec.bat dementsprechend anpassen, so dass Himen.sys und EMM386.exe verwendet wird und dann mittels devicehigh und loadhigh versuchen, soviel wie möglich nach oben auszulagern.
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#5 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 26. April 2015 - 19:08

MASM geht in jeder VS-Version ab 2005, überhaupt kein Problem.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#6 _nobido_

  • Gruppe: Gäste

geschrieben 26. April 2015 - 19:15

Beitrag anzeigenZitat (DK2000: 26. April 2015 - 19:00)

Ach, siehst, dass habe ich gar nicht gesehen und beim Abschreiben automatisch das h geschrieben. :blush:

Ja, jetzt ist alles klar.

Das 'h' bedeutet hier, dass die 21 ein Hexwert ist. schreibt man nur 21, dann wird die 21 als Dezimalwert interpretiert und dieser wird dann wiederum in Hex umgewandelt: Aus 21 wird 15h.

Ja, jetzt macht das Sinn. Auf diese Kleinigkeit habe ich gar nicht geachtet.


Daran hat es gelegen! Mein Fehler, grad nochmal den Source durgegangen.
Ich war kurzfristig davon ausgegangen dass ich es im Buch ohne das "h" gelesen hätte und so auch im Source umgesetzt war.
Grad nochmals den Source angeguckt und... naja, schlagt mich. Auch wenn Sonntag ist :P


Beitrag anzeigenZitat (DK2000: 26. April 2015 - 19:00)

Was VirualBox un DOS angeht, so verhält sich das wie bei einem normalen PC. Du musst die Config.sys und Autoexec.bat dementsprechend anpassen, so dass Himen.sys und EMM386.exe verwendet wird und dann mittels devicehigh und loadhigh versuchen, soviel wie möglich nach oben auszulagern.


Beide Systeme sind gleich konfiguriert, über beie Systeme habe ich MEMMAKER laufen lassen (bin bissl faul heute). Mit unterschiedlichen Ergebnissen.


Beitrag anzeigenZitat (RalphS: 26. April 2015 - 19:08)

MASM geht in jeder VS-Version ab 2005, überhaupt kein Problem.


Kann (zumindest bei mir) nicht sein. Ich habe VS 2010 installiert und die Installation wird mit Hinweise auf das fehlende VS2005 Express verweigert. Auch lt. MS-Seite wird VS2005 Express vorausgesetzt, da sonst die Installation verweigert wird (wie es bei mir der Fall ist).

Dieser Beitrag wurde von nobido bearbeitet: 26. April 2015 - 19:30

0

#7 Mitglied ist online   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.797
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 26. April 2015 - 19:35

Beitrag anzeigenZitat (nobido: 26. April 2015 - 19:15)

Daran kann/sollte es nicht liegen. int21 wird im Loop ja auch werwendet. Und da geb ich das nicht extra per int 21h an. Auch das "Lehrbuch", welches ich verwende, arbeitet ohne die Angabe mit "h".

Doch, das liegt daran. Es passt ja auch bei Dir:

int21 --> int15h
int20 --> int14h
int22 --> int16h

Solange an der Zahl kein entsprechender Suffix für Hexadezimal ('h') angegeben wird, interpretiert TASM die Zahl als Dezimalzahl und übersetzt diese dann in Hex.

In Deinem Loop hast Du ja auch int 21h geschrieben. Hättest Du hier auch int 21 geschrieben, hätte das hier schon nicht funktioniert. Es hätte aber funktioniert, wenn Du int 33 geschrieben hättest.

Mit Interurpt 21h (Interrupt 33) rufst Du ja die ja die Main DOS API auf. Die Funktion, welche ausgeführt werden soll, wird vorher in AH übergeben. In Deinem Falle war das 4Ch (= Terminate with return code). Das 4Ch ist auch in Hex angegeben.

Das Dein 'Lehrbuch' darauf nicht eingeht, ist da nicht so gut. Normaler Weise gibt es da immer ein Kapitel über die Schreibweise von Zahlen, wenn verschiedene Zahlensysteme verwendet werden. Das muss man auch zwingend beachten, ansonsten gibt das Chaos.

Welcher Assembler wird denn in Deinem Lehrbuch vorausgesetzt?
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

#8 _nobido_

  • Gruppe: Gäste

geschrieben 26. April 2015 - 19:42

Hehe. Deine Antwort hat sich mit meiner korrigierten Antwort überschritten.

In meinem "Lehrbuch" wird kurz auf die Schreibweise eingegangen, auch auf das "h" bei Angabe von HEX-Werten. Du musst bitte einfach entschuldigen, bin in Assembler ein wirklich blutiger Anfänger - seit letztem Freitag beschäftige ich mich damit.

Ein spezieller Assembler wird nicht verlangt, der Author selbst arbeitet aber mit hauptsächlich TASM, wobei die Beispiele aber alle auch mit dem MASM funktionieren sollen.

Trotzdem Danke!
0

#9 Mitglied ist online   DK2000 

  • Gruppe: Administration
  • Beiträge: 19.797
  • Beigetreten: 19. August 04
  • Reputation: 1.434
  • Geschlecht:Männlich
  • Wohnort:Oben auf dem Berg
  • Interessen:Essen, PC, Filme, TV Serien...

geschrieben 26. April 2015 - 19:47

Ist ja nicht weiter tragisch. Jetzt weißt Du es ja. Es ist halt wichtig, sich mit der Schreibweise der Zahlensysteme vertraut zu machen (egal welche Programmiersprache).
Ich bin kein Toilettenpapier-Hamster.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0