簡體   English   中英

X86 32b組裝-使用環礁

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM