PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umrechnung



Blackbumpkin
25.01.2006, 11:58
Hallo Roboternetz.de,

Ich bin auf der suche nach der Erleuchtung!

ich gehe von einem ATmega8 aus

HEX
0000:9AB8
0001:9AC0
0002:C000

BINÄR
Flash-Adresse 0: 1001101010111000
Flash-Adresse 1: 1001101011000000
Flash-Adresse 2: 1100000000000000

Das ist noch klar!

Wie kommt man jetzt auf dieses ergebnis???
1001 1010 AAAA Abbb Befehl SBI: Setze Bit Nr. b im I/O-Register A
1100 kkkk kkkk kkkk Befehl RJMP: Springe um +/-k Adressen
Laut meinem Buch: AVR-Assembler-Dokumentation unter Opcodes ich habe noch eine Liste (Register Summary).
das finde ich auch aber sehr umständlich... mir ist jetzt nicht ganz klar was bedeutet jetzt hier das AAAA Abbb und das kkkk kkkk kkkk

wie übersetzt das jetzt Assembler???

und dann geht es ja noch einen Schritt weiter.

0: 1001101010111000 = SBI 0b10111,0 = SBI 0x17,0
1: 1001101011000000 = SBI 0b11000,0 = SBI 0x18,0
2: 1100000000000000 = RJMP 0 = RJMP 0
Wie wird das gerechnet???

Mit besten Grüßen

Blackbumpkin

PicNick
25.01.2006, 12:40
Der Maschinen code ist so eine Art Hufman Zeugs, ein paar Hinweise findest du da
https://www.roboternetz.de/wissen/index.php/Atmel_Controller_Mega16_und_Mega32#Maschinen-Code

Blackbumpkin
25.01.2006, 14:16
Hallo,

also wenn ich erlich bin raffe ich jetzt gar nichts mehr...
vielleicht kann mir jemand das genauer erklären...

Blackbumpkin

PicNick
25.01.2006, 14:27
Schaun wir mal

1001 1010 AAAA Abbb Befehl SBI: Setze Bit Nr. b im I/O-Register A
die ersten 8 Bit sind fix, die bedeuten einfach "SBI" (für den AVR)
AAAAA ist die adresse des I/O Registers. das sind 5 Bit, die logo von 0000 = 0x00 = d'0' bis 11111 = 0x1F = d'31' gehen
bbb sind 3 bit, das ist die nummer des Bits, das gefragt ist (0-7)

Hilft das ?

Blackbumpkin
25.01.2006, 15:09
die ersten 8 Bit sind fix, die bedeuten einfach "SBI" (für den AVR)
Ja das ist mir mitlerweile klar geworden, da gibt es ja auch welche die nur 4 haben oder.
z.B. 1110 = RJMP


AAAAA ist die adresse des I/O Registers. das sind 5 Bit, die logo von 0000 = 0x00 = d'0' bis 11111 = 0x1F = d'31' gehen
in meinem fall währe das ja dann 1011 1 wenn ich jetzt von Binär in Hex umrechne komme ich auf 0x17. so weit so gut was ist jetzt das d'0' bis d'31' wo kommt das her???


bbb sind 3 bit, das ist die nummer des Bits, das gefragt ist (0-7)
die letzten drei 0er sind ja dann das Bit das gefragt ist. z.b. 000=0 und 101=5 das mach mir auch kein Problem.

Vielen Dank

PicNick
25.01.2006, 15:23
na, "d" heißt nur einfach dezimal
0x17 ---> 1 x 16 + 7 --> dezimal 23 ( 2 x 10 + 3) , also d'23'

Das mit dem Code ist ein wenig ungewohnt. Lies einmal da, wie ein Huffmann -Code funktioniert.
http://de.wikipedia.org/wiki/Huffmann

Beim AVR-Code ist es ähnlich, nur entscheidet nicht sosehr die Häufigkeit, sondern, wieviel Bits für die Befehls-argumente gebraucht werden.
RJMP brauch viel, also muß der eigentliche Code kürzer sein,
während z.B. BCLR ja nur 3 Bit braucht.

Zusätzlich sind die Code und Argument Bits eigenwillig verteilt, was die Sache noch aufmischt.

Lies wirklich erstmal in der Wiki und laß das mal versickern.