豆拉貢的氧氣考驗

豆拉貢(Lindwurm),是一種優雅、強大、且兇猛的生物。多年來被編譯器(Compiler)工程師當成守護神一般的存在。編譯器領域如聖經般的教科書 — Compilers: Principles, Techniques, and Tools— 其封面畫的就是一隻高貴的豆拉貢。
Compilers: Principles, Techniques, and Tools 一書封面

— — 但身為一個正常的資工系學生根本沒管那麼多

「X!,怎麼辦明天就是 dealine 了耶」

「對啊這什麼鬼作業?!要我們輸出最少行的組合語言?然後額外的編譯器選項只能下…”-O2”??」

「O2是啥?」

「不知道,氧氣吧(笑)」

「三X,再寫不出來我就真的要缺氧了啦」

缺氧.是一件有生命危險的事,我相信品格高尚、有正義感、且受過CPR訓練的國立清華大學學生一定不會見死不救

就讓我們來幫幫這兩位廢…為作業所苦惱的青年吧!


本次小競賽的平台在以下網址:

http://140.114.78.64:9488/

如大家所見,該網頁在左邊欄位打上C/C++ code 之後,就會在右邊欄位顯示生成的組合語言。

如前一段所提到的,各位必須要修改下面這個小程式,使得生成的組合語言裡, foo 函式的行數最少。

同時,有以下限制:

  1. 編譯器只能用 /usr/bin/clang++,額外的編譯器選項只能有 -O2

2. 在運算 C 陣列元素的值的時候,必須讀取 A 與 B 陣列

3. 修改後的程式 A,B,C 陣列最終的值,必須要跟原本程式產生的一樣。

4. 不要更改 main 函式,也不要移除第6行

5. 不能在 foo 裡面呼叫使用者定義的函式

註: 環境將以上方網址所提供之平台為準

至於要怎麼看 foo 函式所對應的組合語言碼呢?以下面的圖片舉例:

每個函式的開頭都會有一個標籤,像是右邊第一行的 square(int): #@square(int) 以及第11行的 main: #@main 。所以各位就可以先尋找 foo 函式的標籤,然後再尋找下一個函式的標籤,中間的那些就是 foo 的組合語言程式碼了。


這個小競賽一直會持續到 2017/10/26 中午12:00pm 。請於下方表單提交您的答案,與報名當天下午 17:30(於資電館5樓533室) 就是我們清大程式語言實驗室(PLLab)李政崑老師的專題說明會,屆時我們也會公布優勝者以及講解。

優勝者將可以獲得到一個神秘小禮物喔

另外我們也會在說明會上準備披薩與飲料,歡迎對我們實驗室有興趣的人一起來聚一聚!

說明會報名與小競賽提交表單:https://goo.gl/forms/MV22gNuZFdFJo7zv1

註: 優勝者將會是遵守上方所提及限制下,相對於其他參賽者、生成組合語言行數最少的一位

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.