ASM 板


LINE

看板 ASM  RSS
Programming from the Ground Up http://ftp.twaren.net/Unix/NonGNU/pgubook/ (免費下載) ---- 這是一本觀點獨特的書, 他用組合語言的方式, 闡述程式最底層的世界 這樣講聽來有點空洞, 直接看這本書第一個程式吧 Chapter 3. Your First Programs ---- .section .text .global _start _start: movl $1, %eax movl $0, %ebx int $0x80 這是 Linux底下, 一段小到不能再小的程式 程式從 _start 進入, 然後設定 x86 暫存器: %eax = 1, %ebx = 0 int $80 是發出軟體中斷的指令, 其中 0x80 代表 Linux System Call 呼叫 System Call 的時候 %eax 放 system call ID, 1 表示離開程式 %ebx 表示 main function 的 return value 呼叫完這個 system call, Linux 就會結束程式 並把 %ebx 的內容當作 main() 的回傳值 User 接下來可以在 shell 裡, 打 echo $? 觀察這個回傳值 ---- 這個例子真的口味獨特 !! 他解釋一般程式是怎麼和 OS 溝通, 怎麼呼叫 system call 另外用很少的程式碼, 解釋組合語言的設施 看過這一小段程式, 起碼我知道, 當我呼叫 exit() 時, 原來做了這些事 書上還有用組合語言, 寫一小段程式, 開檔, 把所有字轉大寫, 存檔, 關檔 WHAT !! 用組合語言做這些事喔 !! 當我親自寫了這段程式, 心中的感動是無以言喻的 :) 推薦給所有想知道事物真正面貌的人閱讀 :) ---- Chapter 4 "All About Functions" 函數, 對應到的 assembly 語言, 這個是極端重要的 topic 靠這章的幫忙, 我總算是懂 x86的 stack frame 而且也真的寫了一些 assembly function 來呼叫 這章的範例是一個函數, 計算 2^3 + 2^5, 然後回傳 書上的玩法是從頭到尾都用 assembly, 我是先寫 C 版本, 搭配一個 main() 呼叫 int power(int base, int exp) { int ret = 1; for(i=0; i<exp; i++) ret *= base; return ret; } 下一步, 把 power() 改成用 assembly 寫, 混用 assembly 和 C 最後, 再把整個 C 都換成 assembly, 這樣玩下來收穫良多 ---- Chapter 5 Dealing with Files 看到這章的標題, 我還真的懷疑看錯了... 檔案處理耶 !! 一般的檔案處理依賴神秘的 fopen/fwrite/fread, 或是底層的 open/read/write 書上告訴你, 這些東西都是藉由 OS 的 system call 完成 在呼叫 system call 之前, 把對應的 call ID 和參數放在暫存器裡 然後執行 INT 0x80, OS就會接手剩下的任務了 這章節真的很不錯, 隱藏在 open/read/write 底下的細節, 全部都出來了 而且用組合語言, 自己寫 open/read/write, 成就感滿點 !! 實現的手段和 chapter.4 一樣, 先用 C 刻出骨架, 再逐漸換成組合語言 我不知道這樣做對不對, 對 C我的掌握度高, 而且有骨架比較容易驗證 assembly 全系統直接從 assembly 開始寫, 我想我受不了 XD ---- Chapter 6 "Reading and Writing Simple Record" 這章揭露怎麼處理 struct (C 語言), 搭配 chapter 5 的檔案處理 我覺得受到的刺激沒有上一章那麼強悍 而且看到組語的數目直線上升, 我有點受不了了 XD ---- Chapter 7 "Developing Robust Programs" 這章有點像講軟體工程, 他告訴你程式設計師拙於估算 schedule XD 書上給了幾個建議, 基本上是 "testing-driven" 程式設計方式 有種開發方式建議在撰寫程式碼之前, 先寫好 test case Test case 日後可以反覆驗證程式, IC的 test bench 就是類似的觀點 ---- Chapter 8 "Sharing Functions with Code Libraries" 站在巨人的肩膀上, 所以我們在 Standard C Library 的基礎上寫程式 不然連 printf() 都得自己寫, 實在是太難過了 這章用深入淺出的方式, 介紹怎麼連結函式庫, 對應的 Linker 指令怎麼下 這一小段指令值得寫在這裡... as helloworld.s -o helloworld.o ld -dynamic-linker /lib/ld-linux.so.2 helloworld.o -lc -o helloworld -dynamic-linker /lib/ld-linux.so.2 指示 Linker 去哪裡找 dynamic linker -lc 表示連結 LIBC (Library C), 實際會連結到 /lib/libc.so.6 helloworld.o 表示連結的目標 (我們寫的程式) -o helloworld 代表 linker 的輸出是 helloworld 書上最後一個範例, 作者介紹怎麼產生 shared library 我最近才剛在 debug 時, 感受過這些機制的威力, 看這章特別有感覺 Shared library 機制用範例講, 真的是無比清楚 ---- Chapter 9 "Intermediate Memory Topics" "The Memory Layout of a Linux Program" 搭配 Jserv 的 "深入淺出Hello World, 這裡看得到完整的記憶體配置 搭配 memory layout, 作者揭示了動態配置記憶體和 OS 之間的關聯 原來配置記憶體, 也是搭配 system call, 用 C++ 的 new/delete 最好知道底層"可能"的實作細節, 比較好 作者很有意思, 竟然用 assembly 寫了一套 new / delete 的程式庫 (雖然效能很差) 我很喜歡這個範例, 比如他透過實作, 告訴你 new 要記憶體時, 其實多要了一些 他在前面偷偷塞了一些資料, 從記憶體區塊中間把指標回傳 所以說, 小筆資料儘量不要用動態配置, 根本的原因在這裡 (overhead大) 這一章整體碰觸的 topic 很複雜, 但是作者拿捏的洽到好處, 值得一看 ---- Chapter 10 "Counting Like a Computer" 2's complement Binary <-> decimal AND/OR/XOR logical operation Bit-Wise operation Big/Little Endian 像我這種每天被 fixed point 運算折磨的人, 這章是選擇直接跳過 畢竟我可是每天用身體感受啊 ---- Chapter 11 "High-Level Language" Chapter 12 "Optimization" Chapter 13 "Moving On from Here" 這三章都比較短, 比較沒有我喜歡的底層的東西, 我當故事書很快的讀過 ---- Appendix A. GUI Programming 用 gtk 在 Linux 上寫視窗程式... 而且是用 assembly... 算了... ---- Appendix B. Common x86 Instructions 這是一個不錯的 reference, 他還簡單的介紹 assembler 的虛指令 (directive) 基本上這些資料真的要找, google一大堆 ---- Appendix C. Important System Calls Linux 一些書上出現過的 system call 列表 ---- Appendix D. ASCII Codes ---- Appendix E. C Idioms in Assembly Language 值得一看, 可以大概認識平常用的 C, 會怎麼對應到組語 (for x86) ---- Appendix F. Using GDB Debugger 托這本書的福? 我總算會用 GDB debug 了 用命令下中斷, 單步執行, 印 call stack 實在很有意思 (也很不直覺) 我覺得 GDB 值得學, 看完這本書, 我又多一個 debug 的武器了 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.86.19
1F:推 manchester77:不錯... 03/12 11:47
2F:推 oracle905:推!!!! 03/12 16:16
3F:推 cockskin:超棒的 有下有推 03/12 23:16
4F:推 james732:有下有推!!!! 03/19 10:51
5F:推 autoexe:超棒的!推! 03/23 14:19
6F:推 mabus:推! 08/12 18:04







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP