在Ubuntu 12.04。下,并使用x86 32位汇编可能与C库,我需要使用数字n
2^31 - 1 < n <= 2^63 -1
在我的系统上,C int是32位;并且长多了64位。我知道如何在获得号码后继续进行,但我仍然坚持准备数字。
我的计划方法如下:
- store n as a string in the .data segment
- use atoll (pushl $n_Str, call atoll)
- retrieve the converted value, and store it in two consecutive int-sized storage locations (taking note of likely little-endian storage)
由于%eax通常的32位返回值约定无法应用(或者只能通过指针,我检查过的情况似乎不是这样(%eax指向后面的无法访问的内存)),我假设值可能在(%eax,%ebx)。我检查了高/低的所有排列,假设情况确实如此,但似乎不是(如果是,我搞砸了,请指出正确的方法)。环礁的男人(和男人3)页面没有帮助。
如何检索转换后的整数?如果这种方法不可能(strtoll有同样的问题),对替代方案有什么建议吗?
答案 0 :(得分:2)
它似乎依赖于调用约定和编译器。 __stdcall
函数在EAX:EDX
寄存器中成对返回64位整数。 __cdecl
函数返回指向堆栈的指针到GCC上的整数。 __cdecl
上的Visual C++
个函数会在EAX:EDX
中返回一对。
以下是来源:http://en.wikibooks.org/wiki/X86_Assembly/High-Level_Languages