PIC 16F887 comf-Befehl sehr eigenartig

Persönliche Seite #965296
Lesenswert?

Hallo,

ich wollte gerade ausprobieren ob der COMF Befehl eines PIC 16F887 die 
Bits in einem Byte nur umdreht, oder ob er das Zweierkomplement bildet, 
also mit hinzuaddieren (oder Subtrahieren?) einer 1.

Folgender Code:
1
  movlw  b'01101001'
2
  movwf  tmp1
3
  comf  tmp1,w

ergibt in W: b'10010101' also Zweierkomplement.

dagegen ergibt der Code:
1
  movlw  b'01101001'
2
  movwf  tmp1
3
  comf  tmp1,f

in tmp1: b'10010110' also alle Bits vertauscht ohne eine 1 zu 
subtrahieren.

Kann mir einer sagen warum das so ist? Oder spinnt hier der Simulator? 
In der Doku steht nichts von dieser Eigenheit. Danach müsste bei beiden 
Bsp. das selbe herauskommen. Sehr eigenartig das ist...

Sven
Persönliche Seite #965333
Lesenswert?

Anbei mal noch ein Bild woran der Fehler zu erkennen ist. Füge ich nach 
dem COMF noch ein NOP ein ist alles so, wie es sein sollte. Ohne dieses 
NOP landet aber in W ein falscher Wert, zumindest im Simulator. Wäre mal 
interessant warum das so ist. Da ich jetzt aber weiß, dass die Bits nur 
negiert werden, ist mein Problem erst mal gelöst. Obwohl... Würde mich 
schon interessieren warum er einen falschen Wert nach W schreibt ** 
grübel **.

Sven
Angehängte Dateien:
Persönliche Seite #965344
Lesenswert?

So, ich habs gefunden. Manchmal ist man halt doch etwas voreilig....

Da ich nur zum Testen die 3 Befehle gleich ab Adresse 0 geschrieben habe 
belegen diese die Speicheradresse 0-2. Auf Adresse 3 steht im Quelltext 
nichts, aber im Speicher! Dort steht eine gelöschte Zelle 0x3FFF was 
einem ADDLW 0xFF entspricht. Der Assembler führt diesen Befehl aus auch 
wenn er nicht im Quelltext steht. Normalerweise hätte ja hier auch 
irgendein Sprungbefehl gestanden. Da es aber eine schneller Test sein 
sollte kam nun dieser "Fehler" zustande. Trotzdem danke für die Hilfe.

Gruß
Sven

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren