ARM汇编偶数或寄存器中的奇数

时间:2014-02-14 20:22:26

标签: assembly arm

我目前有一个“循环”用于打印R4中的数字,然后使用Stdout将该数字移动到R1。但是我想只打印偶数。因此,如果我打印所有内容,例如我的序列将输出为2,3,5,6,7,9,10 ...等,但我只想打印出偶数(2,6,10 ......等)

这就是我想要的,但我不确定ARM程序集是否允许这样做:

  1. 检查R4以查看寄存器内的数字是否均匀。
  2. 如果数字是偶数,MOV R1,R4并使用Stdout代码将其打印出来。
  3. 否则,如果R4内的数字是奇数,则继续循环直到指定了多少次。
  4. 任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:2)

数字的均匀性可由其第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...