什么是ARM中的if语句的等价物?

时间:2016-10-16 00:55:01

标签: input architecture arm division multiplication

所以,我正在开发一个ARM程序,它从文件中获取一堆数字并告诉它们是偶数还是奇数。

问题在于我知道如何乘以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是奇数。否则它甚至是?

1 个答案:

答案 0 :(得分:0)

一个简短的回答:你不需要乘以0.5或类似的东西。您需要检查值的LSB(最低有效位)的值。偶数数字为0,奇数数字为1。

更新:您的“C”代码也是错误的。您想使用A%2,而不是A / 2