[問題] 為啥高階語言的hello world跟機器無關?

看板PLT (程式語言與理論)作者 (nnlisalive)時間7年前 (2017/09/08 04:33), 7年前編輯推噓10(10013)
留言23則, 8人參與, 最新討論串1/1
https://helloworldcollection.github.io/ 這個網頁是各種語言寫的Hello World 程式 有565種 包括76人類語言 我看到用音符寫程式的Velato語言XD 如果用組合語言寫Hello World 程式 寫法就會因為不同機器而不同 例如Assembler(8051)的HELLO WORLD程式 ----------------------------------------------- Org 0 mov dptr,#msg mov R0,#30h loop: clr a movc a,@a+dptr jz end mov @R0,a inc R0 inc dptr sjmp loop end: jmp $ msg: db 'Hello World",0 ------------------------------------------------ 那個loop不知道在loop啥的 反正程式碼就是這樣 我猜是因為組合語言就是010110101機械語言的濃縮版 透過鍵盤來濃縮 本來要輸入0100 1000 代表 H 現在搞一個 H 按鈕 透過電路設計當按下按鈕時 送出0100 1000 給電腦 用八條電線? 還是用一條電線依序送出0 1 0 0 1 0 0 0? 總之就是按一下會輸入8個bit Hello world 總共要按10下 再來是有個指令mov 在其他的組合語言版本也有看到 我猜mov就是英文的move的意思 把輸入move到暫存區?? 其他的指令通通看不懂 暫存區就是電腦不知道你輸入hello world要幹嘛 先收起來放著 嚴格講起來電腦不知道你輸入的是hello world 電腦收到的是按下hello world按鈕所輸入的1010...訊號 而且是有順序的 h 在 e 前輸入 e 又在 l 前 所以hello world的二進位訊號 現在被搬進暫存區 等下一步指令 其實整段hello world 程式碼 通通都是0101...的型態 裝入暫存區內 然後大概有指令是告訴8051 準備輸出hello world 所以要再搞出顯示裝置 我有用過麵包板接出計時器 用這個邏輯 假如顯示器設計複雜一點 可以讓顯示器收到0100 1000 亮出 H 的點 例如製作個8*8解析度的顯示器好了 總共64顆LED燈泡 64亮出 HeloWrd 的形狀應該很夠了 (那個 W 可能不太清楚) 透過nand nor not邏輯閘組合出一個8bit控制64顆燈泡怎亮的電路 可能不用控制到64顆 有幾顆可能永遠不會亮 不用管他 不過也許有其他字母會讓它亮 所以設計時要考慮進來 總之 Hello world 終於順利顯示在螢幕上了 結論是這個程式碼會跟 1.輸入裝置 2.暫存器 3.輸出裝置 有很大的關係 只要有不同的電路設計 輸出的0101...在顯示器上就不是預期的形狀 但現在我看C C++ Java 這些程式 完全不care這些東西耶 我是指大家的電腦都不一樣阿 雖然鍵盤都一樣 但是大家的螢幕 CPU 記憶體都不一樣 有人用22吋 24吋 記憶體也有DDR2 DDR3 DDR4 CPU也有Intel AMD 主機板 顯示卡 也一堆不同廠商 大家用著各式各樣不同的零件組成的電腦 安裝完作業系統和C++編輯器 只要在C++的編輯器打入 --------------------------------------------- #include <iostream.h> main() { cout << "Hello World!" << endl; return 0; } -------------------------------------------- 編譯完 執行就能在命令提示字元顯示 Hello world -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.33.245 ※ 文章網址: https://www.ptt.cc/bbs/PLT/M.1504816399.A.B44.html ※ 編輯: nnlisalive (36.238.33.245), 09/08/2017 05:14:12

09/08 08:12, , 1F
建議你去找本計算機概論從頭到尾讀完再回頭來看你的問題
09/08 08:12, 1F

09/08 09:34, , 2F
底層原理其實一樣,但編譯器大神處理掉了
09/08 09:34, 2F

09/08 09:35, , 3F
高階語言的重點就是不用管硬體啊XD
09/08 09:35, 3F

09/08 16:45, , 4F
這問題有點尷尬...感覺你需要先搞懂計算機的基礎
09/08 16:45, 4F

09/08 16:46, , 5F
簡單的說編譯器知道各機器所需要的機器碼
09/08 16:46, 5F

09/08 16:46, , 6F
他會自動將你的code轉換成對應的機器碼
09/08 16:46, 6F

09/08 16:48, , 7F
還有你說這那堆硬體其實都沒差,只有CPU的架構才有影響
09/08 16:48, 7F

09/08 16:49, , 8F
這種簡單的程式只有CPU架構跟OS會影響生出來的執行檔
09/08 16:49, 8F

09/08 22:37, , 9F
你講的不就是編譯器在做的事嗎…
09/08 22:37, 9F

09/13 08:25, , 10F
去讀編譯器和直譯器的書就有解了
09/13 08:25, 10F

09/17 22:02, , 11F
白算盤講的軟韌體介面,就是你不知ASM在幹嘛的地方。
09/17 22:02, 11F

10/15 14:54, , 12F
高階的特性就是可以從實際層面"抽離",所以又叫做"抽
10/15 14:54, 12F

10/15 14:54, , 13F
象化",抽象化的好處是可以相容,跨平台都適用,設計
10/15 14:54, 13F

10/15 14:54, , 14F
起來省力,壞處是中間的轉換(或許會)讓效能變差一點點
10/15 14:54, 14F

10/15 14:57, , 15F
如果有興趣往高階走,比程式語言更高階的是演算法
10/15 14:57, 15F

10/16 05:46, , 16F
樓上,語言和算法是兩個完全不同的東西吧 = =
10/16 05:46, 16F

10/16 05:46, , 17F
還有抽象化是忽略整體的一部分,有助於將不同的東西歸類
10/16 05:46, 17F

11/18 16:14, , 18F
樓上,我覺得樓上上只是在表達概念
11/18 16:14, 18F

11/18 16:14, , 19F
因為演算法是跨越各種語言的
11/18 16:14, 19F

11/18 16:15, , 20F
正如同高階語言跨越機械的概念相近
11/18 16:15, 20F

12/04 08:18, , 21F
語言也是跨越各種演算法的啊…
12/04 08:18, 21F

12/04 08:18, , 22F
而且不管高不高階,語言本來就是跨越機械的不是嗎
12/04 08:18, 22F

12/04 08:21, , 23F
我是指在有對應的編/組譯器的情況下
12/04 08:21, 23F
文章代碼(AID): #1PiQqFj4 (PLT)
文章代碼(AID): #1PiQqFj4 (PLT)