-
        

Ergebnis 1 bis 4 von 4

Thema: Substraktion

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.03.2010
    Beiträge
    33

    Substraktion

    Anzeige

    ich habe ein kleines Prog geschrieben, und der soll 2 Reg vergleichen, wenn reg 1>reg2 dann zeigt das richtiges Ergebnis aber andersrum(reg2>reg1) tut er nicht: zum Beispiel:
    Code:
    reg1 = 0x0501
    reg2 =  0xA2BB
    
    main:
    mov		temp1, V1		; V1=low (reg1) in temp1 speichern	
    mov      	temp2,V2		; V2=high(reg1) in temp2 speichern	
    sub		temp1,V3		; V3=low(reg2)
                                                                ;(V1-V3) in temp1 speichern
    sbc		temp2,V4		; V4=high(reg2)
                                                             ; (V2-V4) in temp2 speichern
    
    cp	temp1, low(65531) 
    cp	tem2, high(65531)
    brsh	led2_aus
    
    
    cp	temp1, low(5) 
    cp	tem2, high(5)
    brsl	led2_aus
    
    Cp	V1,V3
    Breq  led1_on
    Brlo led2_on
    Brsh led2_aus
    
    Led1_on:
    	Sbi	portb,0
    Rjmp main
    
    Led2_on: 
    Sbi	portb, 2
    Rjmp main
    Led2_aus: 
    	Cbi	portb2
    Rjmp main

    Das Ergebnis ist: temp1 = 0x63 ( das richtige Ergeb= 0xFFFFFFFFFFFFFF63)
    : temp2 = 0x46 (Erg= FFFFFFFFFFFFFF46).

    Wie macht man das um den richtigen Wert zu zeigen, gibt es irgend einen Befehl für den absolut Wert.
    Oder wie macht man das?
    danke

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Guckstu da:
    http://www.rn-wissen.de/index.php/As...nd_.22V.22_Bit
    VIelleicht hilft dir das ja.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für den Absolutbetrag gibt es keinen extra Befehl.

    Es gibt da nur einen etwas verwirrenden (könnte man auch BUG nennen) Text in der Beschreibung zum Carry Falg beim CMP und SUB Befehl.
    Original steht da in der Hilfe von AVRstudio, und der offiziellen Befehlsbeschreibung zum Carry Flag:
    Set if the absolute value of the contents of Rr is larger than the absolute value of Rd; cleared otherwise.

    Da hat das Wort absolute ist da aber falsch, richtig müßte da stattdessen "unsigned" stehen.


    Bei dem Programm siehr die Subtraktion noch richtig aus, nur die Vergleiche sind muks. Die macht man fast wie die Subtraktion und schaut dann je nach Zahlen Format (mit oder ohne Vorzeichen) das V oder C-Flag an.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    bei Compares in denen die zu vergleichenden Werte in mehreren Registern stehen wird auch das Kommando CPC verwendet.
    Dann stimmt das auch.

    cp reg1a,reg1b
    cpc reg2a,reg2b
    cpc reg3a,reg3b
    cpc reg4a,reg4b
    brcs rega_grösser

    oder
    breq

    oder
    brne

    oder
    brcc

    Für den Vergleich mit Immideate Werten wie CPI gibt es leider kein Kommando, das mit Carry arbeitet.
    Da muß man dann den Wert schon in ein Register übertragen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •