2016-10-16 679 views
1

그래서 저는 파일에서 숫자를 가져 와서 짝수인지 홀수인지를 알려주는 ARM 프로그램을 만들고 있습니다. 나는 코드의 관점에서 무엇을ARM의 if 문과 동일한 기능은 무엇입니까?

문제는 내가 0.5를 곱하는 방법을 알고,하지만 난 ARM 여기

if (A/2 == 0) 
    print even 
else 
    print odd 

이 높은 수준의 문 같은 작업을 수행하는 방법을 모르는 것입니다 :

@open input file 
ldr r0,=FileName  @ set Name for input file 
mov r1,#0     @ mode is input 
swi SWI_Open    @ open file for input 
bcs InFileError   @ if error? 
ldr r1,=InFileHandle  @ load input file handle 
str r0,[r1]    @ save the file handle 

@read integers from input file 
NUMBERS: 
ldr r0,=InputFileHandle @ load input file handle 
ldr r0,[r0] 
swi SWI_RdInt    @ read the integer into R0 
bcs EofReached  @ Check Carry-Bit (C): if= 1 then EOF reached 

@multiplication by 0.5 to test for odd or even 
MUL R2 R0 0.5 
@what is the test in ARM 
@for (R0/0.5) == a multiple of 1? 

B NUMBERS 
LOOP: 

@end of program 
Message1: .asciz"Hello World!" 
EOL:  .asciz "\n" 
NewL: .ascii "\n" 
Blank: .ascii " " 
FileName: .asciz"input.txt" 
.end 

그래서 파일에서 입력하고 정수를 읽는 처음 두 가지가 작동한다고 생각합니다. 나는 그것이 2로 나눌 수있는 조건을 테스트하는 방법을 모른다. 나는 0.5로 곱해 졌다고 생각하고, 다음 단계는 그 수의 끝에는 소수점이 없더라도 말하기위한 것이다. , 그렇다면 숫자 B로 나눈 숫자 A는 홀수입니다. 그렇지 않으면 짝수입니까?

답변

0

간단한 대답 : 0.5 또는 그와 비슷한 것을 곱하지 않아도됩니다. 값의 LSB (최하위 비트) 값을 확인해야합니다. 짝수의 경우 0, 홀수의 경우 1입니다.

업데이트 : "C"코드도 잘못되었습니다. A/2가 아닌 % 2을 (를) 사용하려고합니다.

+0

감사합니다. 나는 프로그래밍에서 뭘 알고있다, 나는 잠시 동안 잊어 버렸다. 나는 %가 모듈러스 연산자임을 압니다. 내가 타이핑했을 때 나는 정말로 피곤했다. – user3695903

+0

LSB의 가치를 확인하는 방법에 대한 기사 링크를 보내 줄 수 있습니까? 내가하고있는 일을 알고 싶다. 예제를 제공해 줄 수 있습니까? – user3695903

+1

기사가 없습니다. 기본 작업입니다. ARM asm을 배우고 있다면 ARM Reference Manual이 있습니다. 그렇습니까? 그렇지 않은 경우 - Google을 다운로드하고 다운로드해야합니다. TST 명령을 보거나 ANDS R0, R0, # 1 - 동일한 작업을 수행하지만 R0 ..의 내용을 파괴합니다. (추신 : 실수를 바로 잡기 위해 질문을 편집 할 수 있습니다.) –