请教一段gcc汇编
- static inline unsigned short from32to16(unsigned a)
- {
- unsigned short b = a >> 16;
- asm("addw %w2,%w0nt"
- "adcw $0,%w0n"
- : "=r" (b)
- : "0" (b), "r" (a));
- return b;
- }
复制代码里面的%w0是什么意思?查了一些gcc内嵌汇编的文章,都没有看到这个。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
%w0,表示取%0的16比特。
w, 2字节(word), 如ax
b, 1字节, 如al
k, 4字节, 如eax
q, 8字节, 如rax
h, 高8位, 例如ah
还有一个z, 返回一个字符, 就是上头w/b/k/q/h之中的一个,也就是取operand size。
注意,这些东西,只能应用于 byte-addressable registers。 也就是像rax这样的,本身是64位的寄存器,但是你可以单独只访问它的低32位, 也可以只访问其低16位。
我觉得编译出来之后objdump一下~ 看看编译出来的机器码就知道了~ = =a~
回复 1# jinglexy
复制代码%0是指第0个操作数(从0开始计数),这里指b。
至于w,参见http://gcc.gnu.org/onlinedocs/gc ... tml#Output-Template
`%' followed by a letter and a digit says to output an operand in an alternate fashion. Four letters have standard, built-in meanings described below. The machine description macro PRINT_OPERAND can define additional letters with nonstandard meanings.
所以,具体的含义还需要查看相应的代码