Hallo
Mal als Info zum nachvollziehen.
Compiliert habe ich mit Bascom-AVR. Dazu habe ich quasi eine kleine LIB erstellt, in der die zu übersetzenden Befehle stehen.
Habe das dann von Bascom compilieren lassen über Werkzeuge/Libmanager und dann compiliert.
So erhalte ich eine LBX-Datei, in der die Opcodes stehen.
Die Lib's die man erstellt sind Prozessor-Unabhängig, da sie für alle Prozessoren gelten.
Also Bascom weiß beim compilieren einer Lib in eine Lbx nichts von einem verwendeten Prozessor.
Da das Schreiben von Hand zu mühselig war, habe ich ein Programm erstellt, das mir die Lib-Datei generiert.
Bascom hat übersetzt und mit meinem Decompiler habe ich versucht das zurück zu übersetzen (decompilieren).
Ich bin da stur vorgegangen.
Und habe alle Möglichkeiten durchgespielt, um schwachstellen im Decompiler zu finden.
Dabei habe ich stur den 16-Bit STS k,Rr angewendet.
Es ist natürlich möglich, dass sich opcodes überschneiden wie LDI r20,$FF und SER r20, Hier gibts auch den selben Opcode aber auch das selbe Ergebnis.
Bei STS und LDD ist das nicht der Fall.
Möglicherweise gibts bei Prozessoren, die den 16-Bit STS unterstützen den LDD Rd,Y+q nicht, oder der wird anders kodiert.
Vielleicht ist das die Ursache.
Bei dem STS (16-Bit) steht noch folgendes:
--
A 7-bit address must be supplied. The address given in the instruction is coded to a data space address
as follows:
ADDR[7:0] = (INST[8], INST[8], INST[10], INST[9], INST[3], INST[2], INST[1], INST[0])
Memory access is limited to the address range 0x40...0xbf of the data segment.
This instruction is not available in all devices. Refer to the device specific instruction set summary.
Operation:
(i)
(k) ← Rr
(i)
Syntax: Operands: Program Counter:
STS k,Rr 16 ≤ r ≤ 31, 0 ≤ k ≤ 127 PC ← PC + 1
16-bit Opcode:
1010 1kkk dddd kkkk
Was bedeutet dieser Teil: ADDR[7:0] = (INST[8], INST[8], INST[10], INST[9], INST[3], INST[2], INST[1], INST[0])?
Mitch
Lesezeichen