2010-10-14 122 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");