2016-04-14 9 views
0

Dies ist eine Aufgabe, ich weiß nicht, wo ich anfangen soll.Assembly-Prozedur zum Konvertieren von binär/hex in Split-Oktal

Aufgabe:

Ein Byte kann mit drei Oktalziffern dargestellt werden. Die Bits 7 und 6 bestimmen die linke Oktalziffer (die niemals höher als 3 ist); die Bits 5, 4 und 3 sind die mittlere Ziffer; und die Bits 2, 1 und 0 sind die richtige Ziffer.

Zum Beispiel ist 11010110 b ist 11 010 110 b OR 326 Okt. Der Wert eines Wortes wird in getrennter Oktalzahl dargestellt, indem das 2-3-3-System separat auf die höherwertigen und niederwertigen Bytes angewendet wird.

schreiben procesure splitOctal, die ein Wort auf ein stringof wandelt genau 7 Zeichen, die den Wert der Zahl in der Spalte Oktal darstellt; zwei Dreiergruppen, die durch ein Leerzeichen getrennt sind.

Folgen Sie den cdecl-Protokollen. Die Prozedur wird zwei Parameter haben: 1) Der Wortwert (als niederrangiges Wort eines doublewowd übergeben) 2) die Adresse der 7 Byte langen Zielzeichenfolge.

ÄNDERUNGEN: Anstatt den Wert als Wort auf den Stapel zu übertragen, verwenden Sie nur Doppelwörter auf dem Stapel. Drücken Sie also den Wert, um ihn als DOUBLEword in den Stack zu konvertieren

Ich weiß nicht, wo ich anfangen soll, um dies zu erreichen, indem ich Bits und rotierende Bits verschiebe. Vielleicht gib mir etwas Material zum Lesen oder einen kleinen Kickstart?

+2

Was wissen Sie? Zeigt Ihr Lehrbuch, wie man Bits verschiebt und dreht, und wenn ja, was sagt es, dass Sie nicht verstehen? Können Sie die Prozedurdefinition mit Doppelwortstapelparametern erstellen und zumindest zeigen, was Sie wissen? Es kann auch hilfreich sein, wenn Sie angegeben haben, für welche Plattform diese Assembly vorgesehen ist, da sie normalerweise sehr unterschiedlich sind (ich habe mit x86, x64, SPARC, PIC16F, Z80, IBM iSeries MI und einigen anderen gearbeitet). –

+1

Ich glaube, wir verwenden 8086. Ich weiß, wie Bits zu verschieben und zu drehen. Ich verstehe nicht, wie man 3 Bits bekommt, um zu einem bestimmten Register oder Namensspeicher zu gehen. – GeekyDewd

Antwort

1

einfache Art und Weise:

convert hex -> 8bit ganz Zahl von ASCII oder Subtrahieren '0''A', dann von links verschieben, um den 4-Bit-Wert aus der ersten Stelle, und OR mit dem 4-Bit-Wert aus der zweiten Stelle.

Dann konvertieren Sie diese 8-Bit-Integer in oktal durch Verschieben/Maskierung, um die drei Sätze von Bits zu extrahieren, und fügen Sie '0' zu jedem.


Komplizierterer Weg: kombinieren Sie nicht zu einer beliebigen 8-Bit-Ganzzahl an irgendeinem Punkt. Es gibt viele Möglichkeiten, um das vierte Bit von der ersten Hexadezimalziffer kombiniert mit den niedrigen zwei Bit von der zweiten Hexadezimalziffer zu erhalten. Ihre beste Wette könnte immer noch ein OR beinhalten.


Wenn Sie sich tatsächlich 8086 Targeting und nicht nur normale x86, dann Shift-by-one und Verschiebung von CL sind die einzigen Verschiebungen Sie zur Verfügung haben. Um also um 4 zu schalten, müssen Sie wahrscheinlich mov cl, 4/shl al, cl anstatt nur shl al, 4.

Verwandte Themen