2016-10-16 7 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つのものが動作すると思います。私はそれが2で割り切れるという条件をテストする方法を知らない。私はそれが0.5倍され、次に次のステップは、その数が末尾に何かがある小数点をもたないしかし、そうであれば、番号Bに分割された番号Aは奇数である。そうでなければそれは偶数ですか?

答えて

0

簡単な答え:0.5などの何かを乗算する必要はありません。値のLSB(最下位ビット)の値をチェックする必要があります。偶数の場合は0、奇数の場合は1になります。

更新:あなたの "C"コードも間違っています。あなたはA/2ではなくA%2を使いたいです。

+0

ありがとうございました。私はプログラミングで何を知っている、私はちょうどそのために忘れてしまった。私は%がモジュロ演算子であることを知っています。私はちょうど私がそれをタイプしたときに本当に疲れていた。 – user3695903

+0

LSBの値をチェックする方法を示す記事へのリンクを私に送ることができますか?私は何をしているのか知りたい。例を教えてください。 – user3695903

+1

記事はありません。基本的な操作です。 ARMのasmを学習している場合は、ARMリファレンスマニュアルがありますか?そうでなければ - それのためのGoogleおよびダウンロード、それは持っている必要があります。 TST命令、またはANDS R0、R0、#1は同じ仕事をしますが、R0 ..の内容は破壊されます(PS:間違いを修正するために質問を編集できます)。 –

関連する問題