Erklärbedarf Assembler

OP #3599778
Lesenswert?

Hallo,
ich verstehe den Assembler Code hier nicht. Komme leider von der C 
Richtung und wollte nun mal etwas tiefer in die Materie einsteigen.

Problem macht mir konkret der Befehl brne nach den zwei compares.
Für das Null flag im sreg ist doch der erste compare völlig unerheblich, 
oder? Warum ist der dann trozdem da. Fragen über Fragen...
1
reset:    clr  r0
2
    out  SREG, r0    ; Clear interrupts and flags
3

4
  ; Set up stack
5
    ldi2  ZL, ZH, RAMEND
6
    out  SPH, ZH
7
    out  SPL, ZL
8
  ; Clear RAM and all registers
9
clear_loop:  st  -Z, r0
10
    cpi  ZL, SRAM_START
11
    cpc  ZH, r0
12
    brne  clear_loop1
13
    ldi  ZL, 30      ; Start clearing registers
14
clear_loop1:  cp  ZL, r0
15
    cpc  ZH, r0
16
    brne  clear_loop    ; Leaves with all registers (r0 through ZH) at 0
Gast #3599852
Lesenswert?

Die Abfrage des Zero Flags gibt tatsächlich keinen echten Test auf 
Gleichheit. Es wird nur das high Byte Verglichen, und ggf. ein Überlauf 
von davor berücksichtigt. Nach CPI  + CPC sind eigentlich nur das Carry 
Flag und negative Falg wirklich aussagekräftig.

Es stimmt: bei 0x00FF ist Schluss.

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