BRGE-Befehl unklar

OP #2924815
Lesenswert?

Moin Moin,

ich hab mal wieder ein kleines Problem mit meinem Mega32...

Es geht um den BRGE-Befehl.
1
freqschleife:
2

3
      out   portc,wf
4
      inc    wf
5
      cpi    freq,1
6
      brge  freqcount
7
      rjmp  freqschleife
8

9
      freqcount:
10

11
        mov    a1,freq
12

13
        fc:
14

15
        dec    a1
16
        brne  fc
17
        rjmp  freqschleife

Wenn freq 0 ist, soll er sich die freqcount-schleife sparen... das 
klappt aber nur, solang freq nicht größer als 0x7F wird, bei 0x80 
verzweigt er nicht mehr... Also nach meinen Mathematikverständniss ist 
0xFF auch größer als 0x01... Für erklärende Antworten wäre ich sehr 
dankbar. =)

MfG, des Chaoskind
Gast #2924826
Lesenswert?

jendrik t. schrieb:

> [...] solang freq nicht größer als 0x7F wird, bei 0x80
> verzweigt er nicht mehr... Also nach meinen Mathematikverständniss ist
> 0xFF auch größer als 0x01... Für erklärende Antworten wäre ich sehr
> dankbar. =)

Ich habe von Assembler keine Ahnung, aber das sieht aus als wäre die 
Variable ein signed 8-bit Integer.

In dem Fall gibt das erste Bit das Vorzeichen an.

Bis 0x7F ist es eine 0 und damit positiv, ab 0x80 ist es eine 1 und 
damit negativ.

Somit ist die Dezimalzahl kleiner.
Gast #2924833
Lesenswert?

signed und unsigned bitte unterscheiden. Wenn bit 7 1 ist, dann ist die 
Zahl negativ. 0x80 ist also -128. Zweierkomplement.
In der Instructionset Tabelle von Atmel stehen die Flags die beachtet 
werden
 und welche Operation ausgeführt wird. Bei einen cpi wird auch nur 
subtrahiert und die Flags ausgewertet ohne ein ergebnis ins Zielregister 
zu schreiben.

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