作者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)
1F:推 dada15427745:感谢 > < 11/09 15:37
2F:推 Markseinn:GOOD 11/15 01:10