查看完整版本: 64位元系統可以寫32位元的程式嗎?
頁: [1]

z24374203 發表於 2014-4-9 03:07 PM

64位元系統可以寫32位元的程式嗎?

如題 我不清楚作業系統的位元數 會不會影響到程式設計的開發

例如: 64位元的作業系統,可以開發32位元的組合語言程式嗎?

感謝各位 熱心回復

<div></div>

charles31240 發表於 2014-4-10 06:55 PM

幾位元其實只是組譯器用的不一樣而已
所以64位元的OS也是可以組譯出32位元的程式(只是要用32位元的組譯器)

z24374203 發表於 2015-8-25 06:03 PM

charles31240 發表於 2014-4-10 06:55 PM static/image/common/back.gif
幾位元其實只是組譯器用的不一樣而已
所以64位元的OS也是可以組譯出32位元的程式(只是要用32位元的組譯器) ...

那請問反過來呢?

32位元的系統可以寫64位元的程式嗎?

假設CPU是32位元的架構 ...

charles31240 發表於 2015-8-26 05:37 PM

z24374203 發表於 2015-8-25 06:03 PM static/image/common/back.gif
那請問反過來呢?

32位元的系統可以寫64位元的程式嗎?


這個問題很好
而我的回復你可以當參考
如果用我的觀念來想的話
32位元程式跟64位元程式的編譯都是看編譯器
如果在32位元環境中可以跑64位元的編譯器
那麼當然就可以編譯出64位元的軟體...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

kwj 發表於 2015-8-27 11:18 AM

路過...

從執行軟體來說,以前聽說 64 位元的作業系統能夠執行 32 位元的程式
是因為有內建 32 位元的模擬器~
但 32 位元的作業系統,肯定不會內建 64 位元的模擬器,所以無法執行~。

編譯器的部分我不太清楚原理.....不過如果前提是作業系統要能執行 64 位元的編譯器程式的話
理論上應該會因為 32 位元的作業系統無法執行 64 位元的編譯器程式
導致也沒辦法編譯出 64 位元的程式?

僅提供臆測的想法,不保證正確 @@...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

z24374203 發表於 2015-8-29 09:24 AM

charles31240 發表於 2015-8-26 05:37 PM static/image/common/back.gif
這個問題很好
而我的回復你可以當參考
如果用我的觀念來想的話


我只知道新的技術大部分都會支援舊的技術,

但舊的技術要支援新的技術就必須特別去設計,不然根本行不通。

chevylin0802 發表於 2015-8-31 11:40 AM

本帖最後由 chevylin0802 於 2015-8-31 12:17 PM 編輯

編譯器要加上連結程式兩個來一起討論

作業系統是幾位元的反而不是重點

如果32位元的作業系統無法開發出64位元的程式
又怎麼會有64位元的作業系統?
所以只要是一個可以在32位元執行的編譯器
只要編譯器本身有支援編譯成64位元的目的碼
再加上連結程式支援連結成64位元的可執行檔
一律都可以編出64位元的程式

其實這裏面就只有一個很簡單的觀念
在GNU所提供的編譯環境原始碼
就已經可以編各式各樣不同的CPU架構, 32/64位元目的碼
所以編譯並不會太難

但是在觀念上麻煩的則是在於連結成可執行檔這個部份
組合語言, C/C++ 的原始碼經過編譯選項的設定後, 可以產生出32/64位元的目的碼
但是32位元的目的碼, 只能與相對應的32位元的程式庫連結
如果是C/C++的話, 也必需使用32位元的啟動目的碼連結
至於組合語言, 也可能需要針對作業系統位元數進行判斷與修正CPU暫存器相關配置
組合語言經過連結器產生執行檔時也會自動在檔案表頭加入位元數設定

64位元作業系統執行32位元的程式並不需要透過模擬器
因為程式載入器會自動研判可執行程式檔的表頭
從而知道是32位元程式或64位元程式
並記錄在Process structure裏面
在開始執行的時候
會在執行之前自動去對CPU旗標設定

至於在32位元作業系統上
自然是無法直接執行64位元的程式
但是卻可以透過虛擬機器使用64位元作業系統環境執行
虛擬機器當然也算是一種模擬器

所以在GNU的規範中
這些編譯環境就被稱為"交互編譯環境" (這是可以直接google的)
其實更正確的翻譯方法應該稱為跨平台編譯環境
編譯環境指的部份就包括跨平台編譯器, 跨平台連結器, 跨平台程式庫產生器, 跨平台C程式庫, 跨平台C標頭檔等
只要這種跨平台編譯環境設置妥善, 就可以進行跨平台編譯
也因此這種方式提供了很多open source能夠編譯出各式不同平台所需的可執行檔以及程式庫
你可以在Linux-32bits環境下編出linux或windows-64bits的可執行檔
你也可以在Linux-64bits環境下編出linux或windows-32bits的可執行檔
你也可以透過Dev-C++在windows環境下編譯出windows-64bits/32bits可執行檔
不管這個windows環境是32bits還是64bits
事實上這種跨平台編譯環境
也可以讓人在x86機器上編譯出arm, mips, ...各式各樣不同架構的CPU所需的整個作業系統
只是編譯出來的作業系統要靠模擬器去執行
最直觀的範例就是android系統的整個platform的編譯及模擬器的模擬
或者像是在Android Studio 或 Eclipse上開發各種應用程式, 使用AVD環境執行App


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

kevinkao809 發表於 2015-11-22 11:21 AM

看的使用的程式語言以及運行環境而定. 例如 JAVA 是運行在 JVM 上, 他隔離的實體的 CPU 與定址, 因此, 無所謂 32 bit or 64 bit 問題. 如果是用 C or C++, 那就要告訴編譯器你要產生 32 bit or 64 bit 的程式

lp.tsai 發表於 2015-11-25 07:13 PM

可以了解一下Cross compiler的開發環境,任何硬體都可以開發程式,重點是在哪種硬體平台可以執行。

cceric 發表於 2015-12-1 05:22 PM

這應該是牽涉到程式運行時候的定址空間是32 or 64 ,跟開發環境的作業系統無關的。<br><br><br><br><br><div></div>

supergirl88 發表於 2015-12-12 12:25 PM

For my opinion is can't,different structure ! am I right?
頁: [1]