看板 NTUE-CS100 關於我們 聯絡資訊
提供一些我以前整理的筆記 一開始很不習慣用ASM方式思考 想知道一些常用的if-else, for, while 怎麼用ASM達成,就看這篇 http://chchwy.blogspot.com/2008/10/assembly-language-patterns.html 範例程式:讀入一串由空白分隔的整數 ex. 1 2 84 6 http://chchwy.blogspot.com/2008/10/masm-io-patterns.html 順便提示一定會用到,但是老師可能不會那麼快講到的部份 1.流程控制 asm所有的流程控制都要用conditional jump (課本6.3) 通常就是用 cmp + jx 兩個指令來做 cmp eax,ebx //比較這兩個reg je haha //je = jump if equal 如果相等就jump到haha的位置 ... haha: //程式就會跳到這裡繼續跑下去 jx指令有非常多種變形 je, jne, jge, jg, ...詳情請翻課本,都條列的很清楚 2.I/O 鍵盤螢幕的輸出輸入,請看課本第五章 Irvine提供了一整套超方便的函數 例如想從鍵盤讀一個整數 call ReadInt //簡單一行...整數就已經躺在eax裡任你蹂躪了 另外還有ReadDec, ReadString, WriteInt, WriteString等等 就請各位翻翻課本了 3. Stack 寫中序轉後序這種問題都需要用stack 其實asm本身就提供了stack指令,所以不用多傷腦筋 push eax //把eax的值推入stack .... pop ebx //從stack取值後放進ebx .... 詳情請看課本5.3 == 廢話分隔線 == 學組語的目的,其實不一定是為了以後工作需要寫組語 倒不如說是學習怎麼跟cpu還有memory打交道 組語跟機器語言幾乎可以算一對一的關係 寫組語幾乎就是親手在對CPU下命令 所以瞭解組語,才能深入瞭解電腦底下的運作原理 比如說在C++裡,用char效率比較好還是int ? 很多人可能會想: char=1byte , int=4bytes 所以char比較快! 事實上不管是char或int 計算時都只需用一個register 所以根本沒差,甚至int還要快一些 Good luck to everyone! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.185.243 ※ 編輯: chchwy 來自: 210.240.185.243 (11/09 15:03)
dada15427745:感謝 > < 11/09 15:37
Markseinn:GOOD 11/15 01:10