Der Maschinen code ist so eine Art Hufman Zeugs, ein paar Hinweise findest du da
https://www.roboternetz.de/wissen/in...Maschinen-Code
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
Der Maschinen code ist so eine Art Hufman Zeugs, ein paar Hinweise findest du da
https://www.roboternetz.de/wissen/in...Maschinen-Code
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo,
also wenn ich erlich bin raffe ich jetzt gar nichts mehr...
vielleicht kann mir jemand das genauer erklären...
Blackbumpkin
Schaun wir mal
die ersten 8 Bit sind fix, die bedeuten einfach "SBI" (für den AVR)1001 1010 AAAA Abbb Befehl SBI: Setze Bit Nr. b im I/O-Register A
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 ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ja das ist mir mitlerweile klar geworden, da gibt es ja auch welche die nur 4 haben oder.die ersten 8 Bit sind fix, die bedeuten einfach "SBI" (für den AVR)
z.B. 1110 = RJMP
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???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
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.bbb sind 3 bit, das ist die nummer des Bits, das gefragt ist (0-7)
Vielen Dank
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.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen