作者chchwy (mat)
看板NTUE-CS100
標題[課業] some tips about asm
時間Mon Nov 9 15:01:46 2009
提供一些我以前整理的筆記
一開始很不習慣用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