2011-04-05 26 views
1

在32位機器上,它應該是4個字節。如何通過組裝獲得建築尺寸?

在64位上,它應該是8個字節。

如何獲得它與程序集?

+2

這個問題是基於一個錯誤的前提 - 有大量的CPU寄存器大小不同於名義體系結構大小。還有地址寄存器和通用寄存器的體系結構是不同的大小。 – 2011-04-05 11:43:57

+0

@Paul R,我意識到這一點,並且改寫了我的問題:) – 2011-04-05 11:47:06

+3

@ compile-fan:你已經知道編譯時/彙編時的架構大小 - 永遠不會有這種情況,你需要確定這個在運行時。 – 2011-04-05 11:56:05

回答

-1

從內存中讀取數據。讀取的字節數是您正在查找的內容。不要問怎麼做,因爲你沒有指定任何特定的CPU。
無論如何,如果你爲32位機器編碼,它也可以在64位上運行,反之則不然。
而且,由於您使用的是asm編程,因此您應該對32位和64位計算機使用不同的編碼,以充分利用CPU的功能。想想strlen()的功能,64位版本的速度是32位版本的兩倍;它們都基於相同的算法,但編碼稍有不同。

+0

這是無稽之談。你的意思是零寄存器,然後從一個全部的塊中加載,並看看有多少位寄存器是全1?即使這有效,這是一個可怕的答案。機器大小在彙編時總是知道的,所以做任何類型的運行時檢查都是愚蠢的。 (除了在某些x86與x86-64代碼注入的情況下,可能會在i386和amd64上創建相同的機器代碼片段)。 – 2016-03-21 04:39:24