2013-02-19 2 views
0

내가비트 연산, 조립

START의 비트 7에서 비트 위치를 변경하는 작업을 가지고 | 비트 6 | bit5 | bit4 | 비트 3 | 비트 2 | 비트 1 | 비트 0

최종 비트 3 '| bit2 '| 비트 7 | 비트 6 | 비트 1 | bit0 | bit5 '| bit4 '

비트 및 시프트/롤링 명령어 사용.

이동 및 롤링과 다른 방식으로 이동하는 방법을 모르겠습니다. 하나 또는 여러 개의 레지스터 만 사용해야합니까?

+0

무엇 프로세서 것이 있습니까? 이렇게하는 방법은 사용 가능한 지침에 따라 크게 다릅니다. http://programming.sirrida.de/calcperm.php에서이 내용을 채우는 것은 4 개의 2 개 그룹으로 비트를 이동하는 것을 의미합니다. 이는 의미가 있습니다. – harold

+0

ATmega8535 용 – knowbody

+0

ldi r16, $ F0; 값은 F0에서 r16까지입니다. 그리고 나서 나는 'lsl', 'lsr'등과 같은 명령을 사용하고있었습니다. – knowbody

답변

2

shift와 rol를 사용하면 두 개의 레지스터로 처리 할 수있어 진행 과정에서 원본을 낭비해야합니다.

오른쪽으로 지우는 것 을 복사하십시오. 왼쪽으로 조금씩 옮깁니다. B를 오른쪽으로 옮겨서 이동 을 복사하여 해당 비트를 B 레지스터에 넣고 LSB를 옮깁니다.

1 - ROR A,A,1  // A = _7654321, --> carry = '0' 
2 - ROR B,B,1  // B = 0_______, --> carry = 'x'/don't care 
3 - ROR A,A,1  // A = x_765432, --> carry = '1' 
4 - ROR B,B,1  // B = 10______, --> carry = 'x'/don't care 
// this has copied two bits from A to B while shifting both 

5 - ROR B,B,1  // B = x10_____, 
6 - ROR B,B,1  // B = xx10____, 

repeat steps 1-4 again for B to contain bits '3 2 _ _ 1 0 _ _' 

의 시퀀스

(그리고이 용액의 절반)

+0

고맙습니다. – knowbody