WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 05.02.2002, 19:36   #1
detonation997
Senior Member
 
Registriert seit: 07.07.2001
Beiträge: 197


detonation997 eine Nachricht über ICQ schicken
Standard Assembler in C++

Ich muss für die Schule ein "Chat-Programm" schreiben. Die "Daten" werden über die Serielle Schnittstelle transportiert.

Mein Problem:

Ich möchte dem Benutzer Eingabe der I/O-Adresse ersparen. Das heißt, ich will mittels Assembler von der Adresse 0040:0000 das Word lesen, da steht die I/O-Adresse ja drin.

Mein Vorschlag wäre:

asm{
mov ax,40
mov ds,ax
mov bx,0
mov cx,[bx]
mov io,cx
}

io ist eine bereits initialisierte Integervariable. Mit der will ich dann weiter arbeiten. Die Zeile

mov ds,ax

macht Probleme; da hängt sich das ganze so ziemlich auf. Wisst ihr woran das liegt? Wenn ich das Datensegment (ds) durch das Extrasegment (es) ersetze, stürtzt er zumindest nicht ab (funktionieren tuts natürlich nicht...)

Danke schon im Voraus
detonation997 ist offline   Mit Zitat antworten
Alt 06.02.2002, 14:22   #2
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard Zugriff auf Adresse fehlerhaft

fehlerhafter Speicherzugriff:
mov ax,40
mov ds,ax
mov bx,0
mov cx,[bx]

Ich weiß leider nicht mehr genau, welche Segment-Register wie addiert werden.
DS + BX
ES ist für Stack zuständig.

____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 06.02.2002, 14:31   #3
gaelic
nugent
 
Registriert seit: 28.08.2001
Beiträge: 2.500


Standard

1. wieso eigentlich die serielle schnittstelle. verbindest du 2pc's über die seriell??
2. wieso echter assemblercode, ist natürlich super, aber mit c kannst ja auch direkt auf ports zugreifen, oder seh ich das falsch.
____________________________________
kill it & grill it
gaelic ist offline   Mit Zitat antworten
Alt 06.02.2002, 16:06   #4
detonation997
Senior Member
 
Registriert seit: 07.07.2001
Beiträge: 197


detonation997 eine Nachricht über ICQ schicken
Daumen hoch Ihr seht das leider falsch...

Danke schon einmal, dass ihr auf den Beitrag geantwortet habt!

Allerdings möchte ich mit dem kurzen Beispiel auf 0040:0000 zugreifen (im Arbeitsspeicher). Dort steht die I/O-Adresse der Seriellen Schnittstelle. Über diese kann ich dann bequem per C/C++ (inportb; outportb) zugreifen.

Probiert mal in einer Eingabeaufforderung oder einem echten DOS

debug
-d 0040:0000

einzugeben. Da seht ihr , dass dort: F8 03 F8 02...
steht. Das sind die I/O-Adressen der Seriellen Schnittstellen (03F8)

Wenn auf ds die Segment-Adresse steht, dann kann ich per [bx] (ja, das ist ein Zeiger - Offset) direkt von ds:bx (0040:0000) einlesen.
Wenn ich das direkt mit debug mache (eine COM-Datei schreiben), dann funktionierts einwandfrei...(das Extrasegment hab ich nur genommen, weil ich wissen wollte, ob man überhaupt auf solche Segmente zugreifen kann)
detonation997 ist offline   Mit Zitat antworten
Alt 06.02.2002, 16:26   #5
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

@detonation997 unter welchem os schreibst das?
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 06.02.2002, 17:31   #6
detonation997
Senior Member
 
Registriert seit: 07.07.2001
Beiträge: 197


detonation997 eine Nachricht über ICQ schicken
Standard OS

DOS-basierende Betriebssysteme.

Ich hab das Programm schon in MS-DOS, DR-DOS, Windows 98 und Windows XP ausprobiert. Überall der gleiche Fehler. Muss sich also um einen Programmierfehler handeln...
detonation997 ist offline   Mit Zitat antworten
Alt 06.02.2002, 17:32   #7
detonation997
Senior Member
 
Registriert seit: 07.07.2001
Beiträge: 197


detonation997 eine Nachricht über ICQ schicken
Blinzeln Windows XP

Ok, Windows XP basiert nicht auf DOS (wäre halt gern ein Unix)
detonation997 ist offline   Mit Zitat antworten
Alt 06.02.2002, 22:01   #8
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Idee alle Register gesichert?

In deinem Programm-Code fehlt noch, daß du vor der Verwendung aller Register diese über PUSH sichern und anschließend über POP wiederherstellen solltest. Sonst kann das restliche Programm (in welcher Programmiersprache ?) 'durcheinander' kommen.
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:47 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag