[問題] 為啥高階語言的hello world跟機器無關?
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
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
09/08 16:46, 6F
→
09/08 16:48, , 7F
09/08 16:48, 7F
→
09/08 16:49, , 8F
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
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
PLT 近期熱門文章
PTT數位生活區 即時熱門文章