[英]X86 32b assembly - using atoll
在Ubuntu 12.04下,並可能在C庫中使用x86 32位程序集,我需要使用數字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也有同樣的問題),對替代方法有何建議?
它似乎取決於調用約定和編譯器。 __stdcall
函數在EAX:EDX
寄存器中成對返回64位整數。 __cdecl
函數返回指向GCC上整數的指針。 Visual C++
上的__cdecl
函數在EAX:EDX
返回一對。
這是來源: http : //en.wikibooks.org/wiki/X86_Assembly/High-Level_Languages
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.