logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ktory z programikow jest prawidlowy??

adames80 12 Cze 2004 04:03 1554 5
  • #1 687484
    adames80
    Poziom 18  
    ktory z programikow jest prawidlowy?

    ;porownaj rejestry 16 bitowe r3:r2 z r1:r0

    cp r2,r0 ;porowanie mlodszych bajtow
    cpc r3,r1 ;porownianie starszych bajtow
    brne loop ;skocz jesli rozne sa liczby

    cp r2,r0
    brne loop
    cpc r3,r0
    brne loop

    Przeniesiono z Programowanie Ogólne. - arnoldziq
  • #2 687743
    h-doc
    Poziom 27  
    W tego typu sytacjach polecam po prostu sprawdzenie działania na symulatorze. Oprócz tego godna polecenia jest również metoda polegająca na napisaniu odpowiednika w C i zobaczeniu, jak z problemem poradził sobie kompilator.

    Przepraszam za nieco mało rzeczową odpowiedź, ale nie chce mi się sprawdzać listy instrukcji AVR i analizować co robi cp a co cpc.
  • #3 688136
    olekewaagata
    Poziom 25  
    Oba będą działać prawidłowo
  • #4 704789
    mcy
    Poziom 15  
    nieprawda. sprawdź w symulatorze. po każdej! operacji porównania są ustawiane flagi w rejestrze SREG. brne sprawdza flagę (Z). Jeżeli operacja CP ustawi flagę a CPC skasuje to skok nie nastąpi

    cp r2,r0 ;porowanie mlodszych bajtow
    cpc r3,r1 ;porownianie starszych bajtow
    brne loop ;skocz jesli rozne sa liczby

    Oba kody oczywiście będą działać, ale w inny sposób.

    Opis działania brne:
    Conditional relative branch. Tests the Zero flag (Z) and branches relatively to PC if Z is cleared. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the unsigned or signed binary number represented in Rd was not equal to the unsigned or signed binary number represented in Rr. This instruction branches relatively to PC in either direction (PC - 63 ≤ destination ≤ PC + 64). The parameter k is the offset from PC and is represented in two's complement form. (Equivalent to instruction BRBC 1,k).

    Operation:

    If Rd ≠ Rr (Z = 0) then PC ← PC + k + 1, else PC ← PC + 1

    Syntax: Operands: Program Counter:

    BRNE k -64 ≤ k ≤ +63 PC <- PC + k + 1

    PC <- PC + 1, if condition is false

    16-bit Opcode:

    1111
    01kk
    kkkk
    k001




    Status Register (SREG) and Boolean Formula
  • #5 704967
    olekewaagata
    Poziom 25  
    Do mcy. Poczytaj sobie dokładnie (może po polsku) działanie instrukcji CPC a przekonasz sie że uwzglednia ona istniejący stan flagi C i nawet jak sama nie ustawia go to przenosi z poprzedniego porównania.
    Przykład: Mikrokontrolery AVR w praktyce J. Doliński wydanie 1 W-wa 2003 str.183
  • #6 705076
    mcy
    Poziom 15  
    Bije się w pierś nie doczytałem instrukcji. Masz rację

    CPC
    This instruction performs a compare between two registers Rd and Rr and also takes into account the previous carry. None of the registers are changed. All conditional branches can be used after this instruction.

    wolę po angielsku.
REKLAMA