Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Brauche Hilfe bei Assemblerprogrammierung » Themenansicht

Autor Thread - Seiten: -1-
000
27.03.2007, 15:59 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Ich möchte den Wert eines Registers hexadezimal auf dem Bildschirm ausgeben.
Der Bildschirmzeichensatz funktioniert so, dass die Buchstaben von A-Z bei 01d-26d liegen und die Ziffern 0-9 bei 48d-57d.

Klar ist, dass ich die beiden Stellen einzeln ausgeben muss.
Ich muss also das Datenwort in 2 Register zerpflücken. Wie bekomme ich das am einfachsten umkodiert?
Wahrscheinlich geht das mit ein paar geschickten Bitschiebe-Operationen, nur weiß ich momentan nicht wie.

Das ganze soll ein RAM-Testprogramm werden, das ich zur Reparatur meines PBT brauche, welches sich derzeit einer vernünftigen Funktion widersetzt und das ich am Freitag zum Clubtreffen repariert mitbringen möchte.
Ich brauchte daher bis Donnerstag eine Lösung...
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
27.03.2007, 21:36 Uhr
Gerhard



Hallo Rüdiger,

bist Du Dir sicher, dass die Buchstaben bei 01d..26d (= 01H..2AH) liegen, die Ziffern aber in der normalen ASCII-Zuordnung (30H..39H)?

Weiteres siehe Mail.
Gruß
Gerhard
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
27.03.2007, 22:55 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
Gerhard schrieb
Hallo Rüdiger,

bist Du Dir sicher, dass die Buchstaben bei 01d..26d (= 01H..2AH) liegen, die Ziffern aber in der normalen ASCII-Zuordnung (30H..39H)?


Ja. Die Zeichenanordnung entspricht dem Lochbandcode, wobei die Bits 7 und 8 nicht benutzt werden.
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
27.03.2007, 23:11 Uhr
ambrosius



Hallo Rüdiger,

siehe PN

Holger
--
viele Grüße
Holger
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
27.03.2007, 23:11 Uhr
DKt



Hallo Rüdiger,

ich denke, ohne eine Verzweigung im Sinne von JC <register>, 0AH wirds nicht gehen. Dann eben das übliche, wenn Carry, dann ADD <register>,30H, sonst INC <register>. Das ganze muss dann eben für beide Teilworte passieren.

Nur ist mir grad der Befehlssatz des U808 nicht geläufig, daher gehe ich naiverweise von den Möglichkeiten des U880 aus.

Gruß Dirk
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
20.05.2007, 14:52 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Ich habe mir nun eine eigene Lösung zusammengebaut, die ich Euch ncht vorenthalten will:

Quellcode:
x0: MOV A,E     Auszugebenden Wert vom Register E holen
    ANI F0      Oberes Halbbyte herausfiltern
    RRC         um 1 Stelle nach rechts schieben
    RRC         um 1 Stelle nach rechts schieben
    RRC         um 1 Stelle nach rechts schieben
    RRC         um 1 Stelle nach rechts schieben

    CPI 0A      Vergleichen mit 10
    JNC x1      Ergebnis<0?
    ADI 39      Für "0"-"9": A->A+57
x1: SUI 09      Für alle: A->A-9

    Ausgabe 1. Zeichen (Register A)        
        
    MOV A,E     Auszugebenden Wert von E holen
    ANI 0F      Unteres Halbbyte herausfiltern
    CPI 0A      Vergleichen mit 10
    JNC x2      Ergebnis<0?
    ADI 39      Für "0"-"9": A->A+57
x2: SUI 09      Für alle: A->A-9

    Ausgabe 2. Zeichen (Register A)        

Leute, lernt Assembler, wir werden das noch brauchen!
--
Kernel panic: Out of swap space.

Dieser Beitrag wurde am 20.05.2007 um 14:57 Uhr von Rüdiger editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek