本帖最后由 zlg315 于 2011-2-12 19:14 编辑
学习汇编语言的目的不是说一定要用汇编语言来设计产品!
虽然汇编语言对于大多数开发人员来说几乎不用,但不等于不重要。学习汇编语言能够帮助我们了解“源头活水——从哪里来的”,而应用即是解决“到那里去的问题”,这是一个程序员应有的修养。其实,无论是汇编语言还是C语言,其编程思想是完全相同的。
熟练掌握汇编语言的开发人员,学习C语言易如反掌,一旦遇到对C语言理解蒙查查的地方,通过对照汇编语言肯定理解到位,这就是掌握汇编语言的优势。
对于80C51来说,调用一个setjmp()函数,通过SDCC51编译为:
LCALL _setjmp;
“return 0;”如何理解,编译一下即可知道,其对应:
MOV DPL, #0x00
RET
执行“cTmp1=setjmp();”,即就是:
;参数赋值
LCALL _setjmp
MOV A, DPL
在Keil C51中可以这样写延时程序:
MOV R6, #0x80
DJNZ R6, $
但在SDCC51中如果也按照上述格式来写的话,“DJNZ R6, $”会让程序跳转到“0地址”,此时,只要查一下反汇编即可知道,其正确的写法为:
MOV R6, #0x80
DJNZ R6, .
从某种意义上来说,调试方法同样也很重要!请问:你真的会调试程序吗?这个问题看起来很简单,如果你(泛指)不是高手,你不见得运用自如。
C语言是好学,但真正搞清楚其中“为什么”的人多吗?比如,定义一个指针函数:
int *posSem(); // 它为什么是指针函数?
因为括号的优先级比*高,所以,“int *posSem();”等价于“int *(posSem());”,很简单吧!如果你没有看过是这样理解的,你不一定“真的懂”。当然,不会这样理解,也会写程序,但你是高手吗?
你可能天天用C语言,你写的前后台代码可以不用做任何修改,即可直接被“基于操作系统的程序”使用吗?直接调用函数,我们常常称之为“紧耦合”,但你懂得如何实现“隔离”吗?
变量指针指向的是一块数据,指针指向不同的变量,其获取的是不同的数据。函数指针指向的是一段代码(即函数),指针指向不同的函数,则具有不同的行为。函数指针是实现分层设计与系统抽象,降低耦合度以及使接口与实现隔离的重要手段。
你善用函数指针吗?否则不是高手。
你可能天天用C语言,知道“void *data;”的用途吗?你或许从来没有用过,甚至没有听说过。
我们常常抱怨待遇太低,可能每行代码只有20—50元,除非你的代码能够被他人复用,跨平台无障碍地复用,否则你的代码可能一钱不值。
大家不要互相贬低,也不要讲歪理,谁有短处谁都有长处,因此,相互学习是最重要的!几个月不上网了,闲来无事瞎说几句罢了。
精通汇编语言的开发人员,一定能学好C语言,除非“堕落”到了不想学的地步! |