2014-02-14 2 views
0

현재 R4의 번호를 인쇄 한 다음이 번호를 Stdout을 사용하여 R1로 옮기는 "루프"가 있습니다. 그러나 나는 단지 짝수를 인쇄하고 싶다. 예를 들어 모든 것을 인쇄 할 경우 2, 3, 5, 6, 7, 9, 10 ... 등으로 출력되지만, 짝수 (2, 6, 10 ... 등) 만 인쇄하고 싶습니다.ARM 어셈블리 짝수 또는 홀수의 레지스터

이것은 내가 원하는하지만 ARM 어셈블리는이 수 있는지 확실하지 않습니다 : 레지스터 내부의 짝수 인 경우

  1. 확인 R4 볼 수 있습니다.
  2. 숫자가 짝수이면 MOV R1, R4 및 Stdout 코드를 사용하여 인쇄하십시오.
  3. 그렇지 않으면 R4 내부의 숫자가 홀수 인 경우 지정된 횟수만큼 루프를 계속 수행하십시오. 어떤 도움이 인정 될 것이다

.. 다수의

답변

2

편평도의 영차 비트에 의해 결정될 수있다. 홀수에는 1이 있고 짝수에는 0이 있습니다.

ARM 어셈블리에서 조건부를 수행하기 위해 플래그에 영향을주는 산술 연산을 수행합니다. 단일 비트의 값을 확인하려면 1을 사용하여 AND를하거나 1을 사용하여 TST를 수행합니다. 후자는 대상이없는 AND이며 비트 AND를 수행하지만 결과는 버립니다. 따라서 요약하면 다음과 같습니다.

TST r4, #1 ; TST with 1, like AND with 1, will zero out all bits but the rightmost one 
BNE Odd ; zero flag not set - meaning it's odd 
MOV R1, R4 

; Output... Do you know how? 


Odd: 
; Continue with the loop... 
+0

고맙습니다. 또한 인쇄 된 짝수를 모두 추가 할 수 있습니까? 나는 그들이 R1로 옮겨졌지만 어딘가에이 값들을 저장할 수 있고 결과를 출력 할 수 있도록 저장된 모든 숫자를 추가하는 ADD 명령을 나중에 가질 수 있는지 알고 있습니까? – ColdMoney21

+0

예. 레지스터를 합계로 지정하고, 루프 전에 0으로 초기화하고,'BNE' 라인과'Odd' 라벨 사이에'ADD rx, r4' 라인을 놓습니다 (조건부가되도록). –

+2

추가 레지스터를 사용하거나 원래 레지스터를 휴지통으로 사용하지 않으려면 'TST'를 사용할 수 있습니다 (예 :'TST r4, # 1'). – Michael