2016-10-20 3 views
1

어셈블리 팔 :TST 및 ARM 어셈블리에서의 연산 LSBit 만 고려되는 이유는 무엇입니까? 참조에서

을 숫자가 짝수 또는 홀수 인 경우 내가 볼 수있는 테스트 코드의 다음 줄에 TST 작업에 관한 약간의 혼동이 있습니다

mov R0, #167 

TST R0, #1 //AND operation 
addeq ... //add if even 
addne ... //add if not even 

내 질문은 왜 번호가 짝수인지 아닌지를 결정하기 위해 최하위 비트 (LSB)만을 고려하고 비트 # 167 (LSB의 0111을 가짐)의 나머지 비트를 고려하지 않는 TSt 연산

TST 167,1 AND 167과 1은 LSB (0111과 0001)이고, LSB가 AND 1이면 ANDing하지 않을 것입니다 2 번째 LSB는 TST 연산이 0을 출력하도록합니까?

+0

AND 연산 만 (하나) "1"의 다른 모든 비트들이 제로이기 때문에 LSB R0의 시험! - R0의 비 개의 LSB가 결과에 영향을 _cannot_ – barny

+0

'0x000000a7 및 0x00000001 == 0x00000001 (= 0)'- 그게 전부입니다. 나는 여기에있는 질문의 전제를 이해하지 못한다 :/ – Notlikethat

+0

"왜 LSBit 만 고려하나요?": 그것은 패리티 비트이기 때문입니다. –

답변

0

Z 플래그는 전체 결과가 0인지 아닌지에 따라 설정됩니다. 즉, 167 & 1의 모든 비트의 수평 OR입니다.

비트 별 32 개의 0이 아닌 결과가 필요하면 AND를 사용하고 플래그 결과가 아닌 정수 레지스터 결과를 살펴보십시오.

3

바이너리 숫자가 짝수 또는 홀수인지 테스트하려면 가장 오른쪽 (최하위) 비트를 확인하기 만하면됩니다. 다른 비트는 중요하지 않습니다. 왜냐하면 모든 "값"이 2의 0이 아닌 수, 즉 짝수이기 때문입니다.

짝수를 함께 사용하면 홀수가 생성되지 않으므로 상관 없습니다.

비트 단위 AND 연산 167과 1의 결과는 1이며 0이 아닙니다. 비트 AND의 두 번째 인수는 LSB 문제가 아닌 다른 비트가 아니기 때문에 나머지 비트에 대해서는 왜 그렇게 많은 이유가 있는지 확신 할 수 없습니다 (모두 암시 적으로 암시 적 결과에서 마스크가 해제되고 0이됩니다). 1

+0

나는 1/1 = 1 만 남는다는 것을 잊어 버렸다. 그렇지 않으면 비트의 나머지를 ANDING 할 때 0이 생기고 # 1 = 0001이기 때문에 non-LSB는 모두 0이므로 ANDed가된다. 그 (것)들과 또한 0 일 것입니다. 감사. – SeesSound

+0

밑수 10에서 숫자가 10으로 나눌 수 있는지를 알기 위해 최하위 숫자가 0인지 확인합니다. 10 진수가 짝수인지 홀수인지를 확인하기 위해 가장 중요한 자리가 짝수인지 홀수인지 확인합니다. 기본 2에서 동일한 거래는 최하위 숫자가 심지어 (0) 또는 홀수 (1)입니다. 기초 8, 기초 16 동일한 규칙을 따라야하는 모든 기지는 홀수 인 기지를 생각해야합니다. –