작성
·
183
1
r0= 0xffffffff
r0 = 1111 1111 1111 1111 1111 1111 1111 1111
r1 = bitnum(2); // bit를 지울 위치 지정
지우는 방법 :
r2 = 0000 0000 0000 0000 0000 0000 0000 0001
lsl r2, r1
r2 = 0000 0000 0000 0000 0000 0000 0000 0100
bic r0,r2
r0 = 1111 1111 1111 1111 1111 1111 1111 1011
r0 = 0xfffffffb
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
만약 잘 이해한게 맞다면
bic 명령어는 r0 값에서 r2를 뺄셈한 것과 동일하다고 할 수 있나요 ??
답변 1
0
안녕하세요. 박종호님!
적어주신 내용을 보면 SINGLE 비트를 지우는 방법으로 맞습니다
저는 멀티 비트를 지우는 방법을 보여드릴게요
연산하기 전의 모습
r0 = 1111 1111 1111 1111 1111 1111 1111 1111 (0xffffffff)
r2 = 0000 0000 0000 0000 0000 1111 0000 0000 (0x00000f00)
지우는 과정 설명 :
r0 = 1111 1111 1111 1111 1111 1111 1111 1111
r2 = ~r2
r2 = 1111 1111 1111 1111 1111 0000 1111 1111
r0 = r0 & r2
r0 = 1111 1111 1111 1111 1111 0000 1111 1111
r0 = 0xfffff0ff
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
만약 잘 이해한게 맞다면
bic 명령어는 r0 값에서 r2를 뺄셈한 것과 동일하다고 할 수 있나요 ??
답변: 뺄셈 연산하고는 다릅니다. 비트 연산은 표현된 그대로 이해하셔야 합니다. r0=r0 & ~r2
이것은 비트 클리어 혹은 마스킹(MASKING) 라고 부르는 동작이고요. 원하는 비트(8,9,10,11번)을 지우기(ZERO CLEAR) 위해 코딩한 것이죠.