X86 32b组装 - 使用环礁

时间:2014-06-09 18:37:47

标签: c assembly x86

在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有同样的问题),对替代方案有什么建议吗?

1 个答案:

答案 0 :(得分:2)

它似乎依赖于调用约定和编译器。 __stdcall函数在EAX:EDX寄存器中成对返回64位整数。 __cdecl函数返回指向堆栈的指针到GCC上的整数。 __cdecl上的Visual C++个函数会在EAX:EDX中返回一对。

以下是来源:http://en.wikibooks.org/wiki/X86_Assembly/High-Level_Languages