2014-02-14 174 views
0

我目前有一個「循環」打印出R4的數字,然後使用Stdout將該數字移動到R1。不過,我只想打印出偶數。所以,如果我打印所有的東西,例如我的序列將輸出爲2,3,5,6,7,9,10等,但我只想打印出偶數(2,6,10 ...等)ARM彙編中的偶數或奇數寄存器

這就是我想要的,但我不知道,如果ARM彙編允許這樣的:

  1. 檢查R4,看看裏面寄存器的個數爲偶數。
  2. 如果數字是偶數,則使用Stdout代碼將MOV R1,R4打印出來。
  3. 否則,如果R4內部的數字是奇數,則繼續循環直到指定了多少次。

任何幫助,將不勝感激..

回答

2

一些平整度可以通過其第零比特來確定。奇數有一個,偶數有零。

在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

當然。指定一個寄存器作爲總和,在循環之前初始化爲零,在'BNE'行和'Odd'標籤之間放置一個'ADD rx,r4'行(因此它是有條件的)。 –

+2

如果不想使用額外的寄存器或垃圾桶,可以使用'TST'(例如'TST r4,#1')。 – Michael