인프런 커뮤니티 질문&답변

박종호님의 프로필 이미지
박종호

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s305_쉬프터와 비트 연산 명령어

제가 잘 이해 했는지 확인해주셨으면 합니다.

작성

·

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) 위해 코딩한 것이죠.

박종호님의 프로필 이미지
박종호

작성한 질문수

질문하기