Aşağıdaki kısa örnekte, [x1] ve [x2] arasındaki kodda kullanılan yazmaç sayısını azaltmanın herhangi bir yolu var mıdır?Mikrodenetleyicide Bitsel Mantık
PINA'dan girdi okuyorum ve bazı mantıksal tablolara göre PORTB için çıktı üretiyorum. Bu, benim için bunu yapmanın en basit yoludur, ama bir tür kavşak gibi görünüyor. Farkında olmadığım daha zarif bir yol var mı? Maskenin miktarını azaltmada olduğu kadar ilgi perfomance (boşluk, hız) değilim ve daha büyük ölçekte kolayca (özensiz/pis) hataları tanıtmak işlemleri vardiya
loop:
;Set Masks for Inputpins [x1]
ldi r17, 0b00000010
ldi r18, 0b00000100
;Read Input from PINA
in r16, PINA
;Apply Masks and normalize
and r17, r16
lsl r17
and r18, r16
lsl r18
lsl r18
;Start with actual bitwise operations e.g [x2]
mov r16, r17
xor r16, r18
and r16, r17
...
...
out PORTB, r16
rjmp loop
Not.
Ayrıca, Codereview.Stackechange'un bu soru için daha uygun bir yer olup olmadığından emin olmadığımı unutmayın.
Hata ile ilgileniyorsanız, neden bir derleyici kullanmıyorsunuz? – user3528438
C Kodu yazmayı ve gcc -S kullanarak mı kastediyorsunuz? – Haini
Belki bir şey özlüyorum, ama Maskleri uygula ve normalleştirdikten sonra 'r17' 0 veya 4'ü içerecek ve 'r18' 0 veya 16'yı içerecek gibi görünüyor. Yani 'xor r16, r18' sen ve 1'leri ortak olmayan 1'şer bit var, bu da 'xor'un bir' ya da 'gibi davranmasını sağlayacak ve bir sonraki satırdaki' ve 'anlamsız görünüyor. – Michael