2010-10-14 167 views
2

我可以寫這樣的事情:ARM內聯彙編 - 在x86的內聯彙編指定單個寄存器作爲約束

asm ("cpuid" 
      : "=a" (_eax), 
       "=b" (_ebx), 
       "=c" (_ecx), 
       "=d" (_edx) 
      : "a" (op)); 

所以在配套配件的限制,而不是隻寫「= R」,讓編譯器選擇寄存器,我可以說我想使用哪個特定的寄存器(=例如使用%eax)

我怎樣才能做到這一點的ARM組裝? 的ARM GCC組件食譜http://www.ethernut.de/en/documents/arm-inline-asm.html狀態,我可以例如使用約束 「R」爲通用一個寄存器R0-R15 「W」爲VFP浮點寄存器之一S0-S31

但我怎麼能限制一個操作數例如完全到S1?或特定的通用寄存器?

謝謝!

+0

什麼問題,能解決的ARM知道哪些註冊特定的操作數被放置在? ARM上的哪些指令_implicitly_修改了寄存器(除了前/後遞增/遞減加載/存儲操作,存在特定的約束)?在這方面,ARM和x86是完全不同的...... x86上的必要條件不在ARM上。 – 2013-05-21 19:55:54

+0

@FrankH。系統調用?這實際上是我發現這個問題的方式。 – Duc 2016-06-24 21:51:55

回答

2

我不認爲gcc for ARM允許您使用constraints來指定使用哪個寄存器。但是,您可以使用explicit register variables指定寄存器,其存儲在一個變量:

register int my_variable asm("r0");