首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC在转换未签名的int时如何使用fildll?

GCC在转换未签名的int时如何使用fildll?
EN

Stack Overflow用户
提问于 2012-07-30 00:46:55
回答 1查看 535关注 0票数 2

英特尔指令集参考声明(重点是地雷):

signed-integer源操作数转换为双扩展精度浮点格式,并将值推送到FPU寄存器堆栈上。源操作数可以是一个字、双字或四字整数。加载时不会出现舍入错误。保存源操作数的符号。该指令在非64位模式和64位模式下的操作是相同的.

在这里您可以看到我的测试用例:

代码语言:javascript
复制
% cat stackoverflow.c       
float uint2float(unsigned int a) {
    return a;
}
% gcc -c stackoverflow.c    
% objdump -d stackoverflow.o

stackoverflow.o:     file format elf32-i386


Disassembly of section .text:

00000000 <uint2float>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 08                sub    $0x8,%esp
   6:   8b 45 08                mov    0x8(%ebp),%eax
   9:   ba 00 00 00 00          mov    $0x0,%edx
   e:   89 45 f8                mov    %eax,-0x8(%ebp)
  11:   89 55 fc                mov    %edx,-0x4(%ebp)
  14:   df 6d f8                fildll -0x8(%ebp)
  17:   c9                      leave  
  18:   c3                      ret    
% gcc --version
gcc-4.6.real (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-30 00:52:52

啊哈!"ll“后缀将使用指令的64位输入变体!GCC将上32位初始化为0,因此输入是否有符号并不重要。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11714238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档