AND, ORR, EOR, BIC and ORN
이번에는 비트연산 명령어인 AND, ORR, EOR, BIC, ORN 명령에 대해 알아보겠습니다.
AND, ORR 등의 비트 연산에 대한 설명은 생략하겠습니다.
AND : Logical AND
두 개의 비트가 모두 "1"이면 "1", 하나라도 "0"이면 "0"이 나오는 AND연산을 수행합니다.
아래의 "ANDS R6,R6,R5" 명령은
R6 = R6 & R5
= 0y1111 &
0y0001
= 0y0001 = 0x1 의 결과를 가지게 됩니다.
실행 전 :
실행 후 :
ORR : Logical OR or bit set
두 개의 비트중 하나라도 "1"이면 "1", 모두 "0"이면 "0"이 나오는 OR연산을 수행합니다.
아래의 "ORRS R2,R2,R3" 명령은
R2 = R2 | R3
= 0y1000 |
0y0011
= 0y1011 = 0xB 의 결과를 가지게 됩니다.
실행 전 :
실행 후 :
EOR : Logical exclusive OR
두 개의 비트가 서로 다르면 "1", 서로 같으면 "0"이 되는 XOR연산을 수행합니다.
아래의 "EOR R2,R1,R0" 명령은
R2 = R1 ^ R0
= 0x5AF0 ^ 0x5500
= 0y0101 1010 1111 0000 ^
0y0101 0101 0000 0000
= 0y0000 1111 1111 0000
= 0x0FF0 의 결과를 가지게 됩니다.
실행 전 :
실행 후 :
BIC : Logical AND NOT or bit clear
해당 비트를 클리어합니다.
아래의 "BICS R1,R1,#0x10" 명령은 "R1 = R1 AND ~0x10" 과 같은 결과를 갖습니다.
R1 = R1 & ~0x10
= 0x32 & ~0x10
= 0y0011 0010 &
0y1110 1111
= 0y0010 0010 = 0x22 가 됩니다.
실행 전 :
실행 후 :
ORN : Logical OR NOT
C문법에는 없는 특이한 연산입니다.
아래의 "ORN R3,R1,R0" 명령은 "R3 = R1 | ~R0" 와 같은 결과를 같습니다.
R3 = R1 | ~R0
= 0x5AF0 | ~0x5500
= 0y0000 0000 0000 0000 0101 1010 1111 0000 |
0y1111 1111 1111 1111 1010 1010 1111 1111
= 0y1111 1111 1111 1111 1111 1010 1111 1111 = 0xFFFFFAFF 의 결과를 갖게 됩니다.
실행 전 :
실행 후 :
이상으로 AND, ORR, EOR, BIC, ORN 명령에 대해 알아보았습니다.
잘못된 사항이나, 추가로 궁금하신 사항은 TRACE32@mdstec.com 으로 연락 부탁드립니다.
"TRACE32로 바라본 ARM - Cortex-M" 으로 돌아가기