“微風小說網”最新網址:https://wfxs.app,請您新增收藏以便訪問
當前位置:微風小說網 > 其它小說 > 夜半鬼入夢 > 第十九章 克蘇魯神話 (3)

第十九章 克蘇魯神話 (3) (第2/3頁)

上一頁 章節列表 下一頁
好書推薦: 變身極品軟妹 刁蠻寵妃一窩三寶 唐家貴小姐 歡喜冤家:國民校草在隔壁 網遊之開局獲得十倍閃避 攝政王,你家王妃是活祖宗 絕代陰妻 我家顧先生超可愛 甜寵小青梅,追妻36計 殭屍萌物:帝少的甜蜜飼養 第一男秘[重生] 鎮國巫女 總裁夫人二選一 上官先生,我跟你不熟! 有鳳難儀瀟湘妃 質子為妃 小福寶被偷人生後,成全京城團寵 她善良犯了錯 戀愛都是甜甜的呀 高武:讓你保家衛國,你直接吃成無敵?

請注意這不是一串隨便瞎寫的0和1,它是有規律的!你們看,以八個0或1為一組,每組中間有個空格。這其中,每一組我們叫做一個“位元組”byte),每一個0或者1,我們叫做一個“位元”bit)。第一個位元組:00000001,假設我們規定,它代表一個命令:加法add)。我們再規定,如果cpu遇到“加法”命令,它就把後面兩個位元組相加,把結果存到前一個位元組所在的地方。於是我們的cpu就能夠計算加法了。規則是給它這三個數:

第一個是表示加法命令的“00000001”,第二個a和第三個b是兩個加數,每次都不同,所以我用x表示那些位元位。同樣的道理我們能夠制定出減法命令、乘法命令、複制命令等等。比如複制命令:我們規定“00001111”代表複制命令,如果cpu遇到“00001111”,它就把後面第二個位元組的資料,複制到後面第一個位元組的資料所表示的位置上注意這些位元組裡的二進位制數不僅可以當數字用,也可以當命令用,也可以用來表示儲存位置)。於是我們就有了複制資料的功能了。

<101nove.pu中的邏輯電路為我們提供的,我們只需要傳送規定好的指令便能使用這些功能。注意,指令的本質是一串0和1代表的資訊,但是我們很難去記憶和區分1101這樣的數字,所以我們就用“add”代表00000001加法指令),用“py”代表00001111複制指令)。在英文裡本來就是加和複制的意思,這就很好記。而“add”、“py”等這些指令集合起來就形成了組合語言。它實際上就是把機器語言一串0和1)直譯成了英文單詞。一般cpu認識的指令不多,就那麼十幾個加上變種一般也就幾十個)。所以組合語言中的指令一一對應也不多,大致分為三種:

資料傳輸類:複制、載入、儲存……算數邏輯類:布林運算、加法運算、自加運算……控制類:轉移、停止……

就這麼幾個指令能幹啥?你別說,我還真有辦法能讓你親自見證一下,就這麼幾個指令,可以讓cpu幹些什麼事。首先,下載《huachine》這個小遊戲。然後開始玩吧。我已經讓群友們驗證過了,不管有沒有學過程式設計都可以玩幾下。而遊戲的主體內容,其實就是以一種有趣的方式在寫彙編程式碼。在過關這個遊戲之後,你會發現你自己用這幾個最簡單的指令,讓計算機實現了一些簡單的功能,諸如:比較兩個數字的大小、判斷一個數字的正負、讓計算機數數、用加法實現了乘法運算、從一組數中找到最小的數……如果你在遊戲裡過五關斬六將實現了這些功能,那麼你就相當於解決了上個世紀電腦科學早期那些先驅們所面對的問題。給自己一個獎勵吧,點選文章末尾的“賞”就會看到程式設計學習大禮包!額,你說你沒有通關?沒關系,最後幾關是比較難,而且這個遊戲只是為了讓你體驗一下彙編程式設計的感覺。

現在你會發現,組合語言其實沒有多複雜,而且比起那些0011的程式碼,真是太好識別了。但是那還不夠,比如我要計算一個:

z+(q10.5)+p2

這個自然的表示式人人都能看懂吧?但是用組合語言寫出來就不那麼好看了:

ov x, y

u y, z

div q, 10.5

add y, q

sub p, 2

add y, p

一眼看上去不知道是在幹嘛。而且組合語言也不夠“自然”,比如我要做一個賦值操作:

上面這種寫法很自然,我們在學數學的時候就是這麼寫的,但是在組合語言中它是這麼寫的:

ov x, y

直譯就是:把y移動到x的儲存位置這是計算機硬體能夠實現的操作)。再比如:

if x

這幾行命令,我們用自然語言就能讀懂它在幹嘛:比較兩個數的大小,然後把大的數賦值給小的數。用組合語言寫就是這樣:<101nove.p x,y

<101nove.ase

<101nove.ase:

ase:

ov y,x

用自然語言寫很簡單的三行命令,用彙編寫就需要這麼多行才能實現。

還記得當初我們為什麼需要彙編嗎?因為機器只能識別0和1構成的指令,但是那種數字指令對我們人類來說很難識別和記憶,所以我們用英文單詞來一一對應那些數字指令,那些英文單詞構成的指令集合就成為了組合語言。新的知識點:當我們寫出彙編程式碼後,在真正交給cpu執行之前,我們得把彙編程式碼翻譯成機器碼,因為cpu只認識0和1構成的機器語言。因為機器指令和彙編指令是一一對應的,所以翻譯過程很簡單,就像把簡體字翻譯成繁體字)。

先驅們嘗試把組合語言簡化的過程中,想到:既然要翻譯,那麼我們能不能創造一種更簡潔的語言,然後把它翻譯成相對複雜的彙編呢?就像把文言文翻譯成語素成分更複雜的現代文。

“私見張良,具告以事“———翻譯為———>“私下會見張良,把事情詳細地告訴了他“

<101nove.語言誕生了。實際上c語言是在101nove.p的基礎上發展出來的,的基礎上發展出來的。在cp之前還有個十幾種其他程式語言。不要管辣麼多,靜靜聽我吹就好。)<101nove.語言

你們看,組合語言多複雜,因為它和機器硬體實現的指令一一對應,所以光改造它而不改造機器指令的話毫無意義。所以我們不如創造一種新的語言,然後把它翻譯成彙編吧!語言有許多強大的優點。但是在此,頂著老師和同行們的壓力)我想讓新手知道的是:函式。

函式是什麼?當我們在寫程式碼的時候,可以想象為我們寫的每一行都是一個指令。我們寫十幾行指令來實現一個乘法運算,用二十幾行寫一個排序操作。程式猿是世界上最懶的物種,他們不想每次要做乘法時都寫十幾行程式碼。能不能用一行指令代表十幾行指令?就像:

指令集a和指令集b所描述的就是完全同樣的事情。但是a用了7個指令,b用了5個指令。如果你要在這件事件上偷懶,你是願意以a的形式還是b的形式來寫這個指令集呢。我不知道你的選擇是什麼,但是作為世界上最懶的物種來說,程式猿在程式設計的時候,能少寫一行就不會多寫,能少敲一個字母就絕對不會敲兩個。所以在碰到上面這個問題時,採用b的寫法無疑。那麼如何實現呢?假設指令集a中的每條指令都是計算機能夠識別的指令,指令集b中的第3條“把大象裝進冰箱”是計算機不能識別的,是我們自己虛構的。但是我們要使用這條指令,因為它對於我們來說很省事。現在很簡單,只要規定:我們每次寫“把大象裝進冰箱”這條虛構指令,就自動把它翻譯成“開啟冰箱、把大象塞進去、關上冰箱”這三條原生指令。翻譯過程不用擔心,前人們已經寫好了各種翻譯器能夠現實這種效果。

那麼,上面我們虛構出來的那條指令:把大象裝進冰箱。其實就是我們所謂的函式!下面展示的是在c語言中建立一個函式的形式。

章節報錯(免登入)

上一頁 章節列表 下一頁
隨機推薦: 鳳還巢之悍妃有毒 鳳舞龍姿 王妃今天虐渣了嗎 謝謝你讓我錯過你 嫡妹非要換親,送我當上侯夫人 元總別囂張 帝少寵妻別上癮 我穿越成女頻小說的反派 主母重生,帶三個炮灰兒女逆襲