贊助廠商

娛樂城推薦

首頁

刊登資訊

  • 刊登者:匿名
  • 時間:2021-06-09 20:10:06

尚未解答程式語言與理論- 為啥高階語言的hello world跟機器無關?

程式語言與理論- 為啥高階語言的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


--

0個答案 程式語言與理論- 為啥高階語言的hello world跟機器無關?

其他問題

友站連結