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

Jak wyodrębnić i skopiować bit z rejestru 8-bitowego w ASM?

cristof_w 18 Gru 2007 18:54 1421 4
  • #1 4601294
    cristof_w
    Poziom 17  
    Posty: 338
    Pomógł: 3
    Ocena: 9
    Witam.
    Mam następujący problem.
    Potrzebuję przekopiować, czy też załadować do danego pinu w porcie jeden, konkretny bit z całego 8-bitowego rejestru. Czyli wyłuskać konkretny bit i później go przekopiowac gdzie indziej.
    Przejrzałem wszystkie instrukcje i jakoś nic mnie niepodchodzi.
    Gdybyś ktoś miał pomysł, wskazówkę, to może dalej bym ruszył już sam.
    Pozdrawiam.
  • #2 4601403
    Terminator
    Poziom 23  
    Posty: 392
    Pomógł: 65
    Ocena: 12
    Operacja iloczynu logicznego oraz przesunięcia w prawo
    np.
    interesuje Cię bit 4 a jakimś rejestrze X i zapisać go na 2 bicie portu D
    push X //odłóż na stos
    and X,b00001000 //interesujacy nas bit 4
    ror X,2  //ror - rotacja w prawo z wpisywaniem 0 na początek X=000000Z0 (Z - czwary bit odczytany z rejestru X na 2 bicie) z 4 miejsca na 2 wiec 2 rotacje - możliwe że ror jest jednoargumentowy wiec musisz go wykonać tyle razy ile potrzebujesz
    and PORTD,b11111101  //najpierw zerujesz ten bit
    add PORTD,X //dodajesz ten bit (dokładniej cały rejestr ale z zerami na nieinteresujących Cię miejscach)
    pop X //zdejmij ze stosu
    

    nazwy rejestrów,nazwy funkcji oraz zapis bitowy liczb (b00000000) jest symboliczny, wszystko zależne od składni asemblera - sama idea jest ważniejsza
  • #3 4601412
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Użyj "zestawu" instrukcji BLD i BST.

    Piotrek
  • #4 4601438
    cristof_w
    Poziom 17  
    Posty: 338
    Pomógł: 3
    Ocena: 9
    Super.
    Właśnie o coś takiego mnie chodziło.
    Przeanalizuje to sobie, póki co dla mnie najważniejsze jest by zajmowało to jak najmniej cyklów.
    Dziękuję.
    Pozdrawiam.

    Dodano po 48 [minuty]:

    Jeszcze jedna kwestia.
    Przeczytałem, i wolałbym uzyc instrukcji bst, bld.
    Jednakże mam problem.
    Nie mam problemu z przekopiowaniem rejestr, rejestr, natomiast mam zagwostkę z przekopiowaniem rejestr port.
    Np. bst R1,2 - biore bit 2 z rejestru r1 i chce go teraz przekopiowac na PORTB na miejsce 4, noi niemoge uzyc takiego zapisu:
    bld PORTB,4

    Zatem jak powinno to wyglądać?
    Prosze o wyjaśnienie.
    Pozdrawiam.
  • #5 4602658
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    Raczej się tak nie da bezpośrednio. dwa sprawdzenia bo chyba szybciej niż jedno i dwa skoki:
    załóżmy ze masz dane w r0:
    sbrc r0,x cbi port a,b
    sbrs r0,x sbi port a,b

    sbrc = pomiń następne jeżeli bit w rejestrze wyzerowany
    sbrs = -//- jeżeli ustawiony. Potrzeba tylko pokombinować z odpowiednim sbi/cbi
REKLAMA