簡體   English   中英

32位windows下的64位寄存器

[英]64-bit registers under 32-bit windows

我剛剛在我的 32 位 Vista 機器上安裝了 mingw32 來試驗 gcc 內聯匯編。 不幸的是,32 位 gcc 編譯器無法識別 64 位寄存器,例如 %%rax。

在我花費大量時間嘗試組裝新工具鏈之前,我有幾個問題:

  1. x86(Intel Core Duo,T5800)上是否有某種處理器模式會阻止它在運行 Vista32 時使用 64 位寄存器(即這是一個失敗的原因)?

  2. 假設 #1 的答案是“當然你可以在 32 位窗口下使用 %rax 等”,gcc 是否可以配置為既識別 64 位寄存器又構建將在 32 位 windows 下運行的可執行文件? 我知道 gcc 有一個 -m64 選項,但是我的 mingw32 附帶的版本沒有編譯 64 位支持。如果它可以構建可以訪問 64 位的 32 位應用程序,我當然願意重建 gcc寄存器,但我不想讓 go 經歷那種痛苦,如果它無論如何都不起作用的話。

旁白:這實際上是學習 SSE2 指令的第一步(是的,我知道,存在編譯器內在函數,但我想從機器級別向上理解它)。

  1. 是的,64 位處理器有 3 種大小模式,16 位、32 位和 64 位。 操作系統不能以大於操作系統本身的模式運行代碼。 因此,Vista 32 位只能運行為 16 位和 32 位構建的代碼。 您的處理器確實支持 64-bits ,因此您應該嘗試在其上安裝 64 位操作系統。 如果您的計算機帶有實際的 windows Vista CD,則可能有一張用於 Vista 64 的單獨 CD。如果您構建一個支持 x86-64 的新工具鏈,您將能夠編譯使用 64 位指令和寄存器的代碼,但您將除非您安裝 64 位操作系統,否則無法運行生成的可執行文件。

  2. 由於rax是一個 64 位的寄存器(32 位的等效寄存器是eax ),它只能從 64 位程序中訪問。 其原因是對處理器如何解釋程序發送的命令的解釋相當復雜。

但是,您實際上不需要訪問 64 位代碼即可使用 MMX、SSE、SSE2 和 SSE3。 所有這些指令都在 32 位模式下可用,並且受您的處理器支持。

您可能還需要考慮運行虛擬機並將 Ubuntu 放入其中。 這將允許您在 Windows 桌面上的 window 內運行 Linux。 我認為使用 GNU 工具鏈(gcc 等)本機會比使用 mingw32 更輕松。 在當今時代,VM 易於安裝和使用,幾乎沒有理由再使用 mingw32。 您還可以查看 MS Visual C++ Express,它是 Microsoft 免費提供的基於 Windows 的編譯器,但它不支持 64 位(您必須為支持的版本付費)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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