刚才去看了下汇编入门知识,弱弱的问下,你们入门入了多久。

2015-04-21 15:40:55 +08:00
 NewYear
随手搜索的,搜到这个入门知识(仗着自己有点编程基础以为至少能入个门摸索一下吧)
http://www.blogjava.net/wxqxs/archive/2009/09/17/277328.html

一开始看得还有点劲……然后就伤不起了,看到指令那一块,就知道坑爹了……

我就看看能不能学点简单的,外…挂方式去增强一下我们的ERP系统。要知道有的功能很简单,但是却没有,有的话就方便许多了。

其中提到的
2、学习汇编需要有哪些编程方面的知识?
没有任何编程方面的知识,学习此语言等于缘木求鱼,所以请放弃学习的想法。一般来说至少要知道如下几点:
*)程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构。
*)知道什么是子程序,什么是调用。
*)汇编程序员的视角。不同编程视角编程要求是不一样的。比如删除文件:
>>用户的视角是找到“删除”按钮或菜单,然后单击一下即可。
>>高级程序员的视角是知道删除的文件,并发出删除命令。这些通过API实现。
>>汇编程员的视角是得到要删除的文件名,找到该文件所在位置,通过调用删除“中断命令”进行删除。
>>操作系统开发人员的视角则是接到删除命令后,先找到系统根目录区,由根目录区的链接依次找到子目录区,直到找到要删除的文件,然后按照操作系统删除文件的规则对该文件名进行修改。比如DOS,只把第一个字符改成"?"。

按程序语句等价的角度看,一行VB的打印语句,用汇编实现大约需要一百二十多行。知道汇编语言的视角后就要知道,前面的道路是坎坷的,没有耐心是不行的。想通过几分钟几行程序就完成很复杂的操作不是件容易的事。
6075 次点击
所在节点    问与答
22 条回复
Phoinikas
2015-04-21 15:56:56 +08:00
汇编简直反人类。。如果你没有强需求的话,我觉得还是放弃吧
jamesxu
2015-04-21 16:00:52 +08:00
建议看看《计算机系统概论》和《深入理解计算机系统》,能看懂汇编就行,也不用了解太深入
Andiry
2015-04-21 16:05:08 +08:00
>>汇编程员的视角是得到要删除的文件名,找到该文件所在位置,通过调用删除“中断命令”进行删除。

这是什么东西。汇编程序员眼里哪来的什么文件名?调用删除“中断命令”又是什么鬼?
yingluck
2015-04-21 16:05:14 +08:00
系主任教了一个学期
xenme
2015-04-21 16:11:15 +08:00
你这都没必要学汇编啊。直接C以及各种语言就可以开搞,直接hook或者注入进入。
有些系统都有直接提供SDK。

汇编语言还是要去调用系统API,最多分析跟踪的时候会需要点汇编知识。
jun4rui
2015-04-21 16:11:23 +08:00
汇编找到好的教材其实很容易学的呀!

我当年买了本程序员资格考试那个虚拟的汇编语言的书,很容易看懂,一下子就OK啦。

基本有编程序的基础就OK了,关键是对计算机的底层有了解就行,不然说寄存器什么的脑子里没概念,还是会有点晕,懂了这些基本汇编就比较好理解了。
Phoinikas
2015-04-21 16:14:22 +08:00
@Andiry 其实我也想问,只记得汇编是直接操作寄存器的,看代码除了指令就是内存地址。不过自己汇编太渣怕记错了。。。
jun4rui
2015-04-21 16:15:15 +08:00
按程序语句等价的角度看,一行VB的打印语句,用汇编实现大约需要一百二十多行。知道汇编语言的视角后就要知道,前面的道路是坎坷的,没有耐心是不行的。想通过几分钟几行程序就完成很复杂的操作不是件容易的事。
=====================================
楼主你想太多了,汇编不是干这个的。你要用汇编做VB那种画界面的活,基本等于从底层打造一套图形环境了,相当于用ANSI C写图形界面。汇编现在就是做一些算法(不过用C写也就够了),调用OS本身提供的API(相当于你说的中断,现在还用中断吗?我的汇编都是DOS时代的,int19貌似重启还是写视频缓冲区啥,十多年都丢给老师了),画GUI还是交给别人吧。
cheng007
2015-04-21 16:21:08 +08:00
当年学x86汇编,把书来来回回看了3遍,才有些感觉,建议第一遍通读,第二部再细读,第三遍的时候就会有感觉了.
汇编指令,指令寻址方式,还有伪指令(方便编译器搞出来的).
无非是加减乘除,把数据从寄存器搬到内存,从内存搬到寄存器,从寄存器搬到寄存器.
汇编就繁琐了点,他本身并不复杂,难的是用汇编写复杂的程序.
你学过一种cpu的汇编后,再学其他的就容易很多了,比如说ARM的汇编指令就比x86容易.
neilwong
2015-04-21 16:27:07 +08:00
是不是可以用单片机来入门,我也是猜的
zipher
2015-04-21 16:29:10 +08:00
课上学了一些 感觉基本就够用
教材是《深入理解计算机原理》
作业是拆炸弹,拆完感觉就入门了
zipher
2015-04-21 16:29:59 +08:00
@zipher 《深入理解计算机系统》。。
chlx
2015-04-21 16:35:44 +08:00
推荐《深入理解计算机原理》,看完觉得不够再看《Computer Architecture: A Quantitative Approach》

正在倍受mid term煎熬的路过...
fxxkgw
2015-04-21 16:58:34 +08:00
以前做驱动时候需要经常接触汇编,大部分时候都在操作寄存器,因为大学时比较渣,然后在JD上看到了一本卖的最好的汇编书,不过只是基于INTEL的。
MIPS的汇编又有点不同于INTEL ARM之类,不过总体差别不大。
如果搞前端的,就不用这些了吧。
nbihgr63249
2015-04-21 17:38:59 +08:00
@fxxkgw MIPS的汇编有啥可推荐的书籍吗?
fxxkgw
2015-04-21 17:42:21 +08:00
@nbihgr63249 MIPS一般用在交换机路由器和防火墙这些数通设备上,华为/三一般都用MIPS体系结构透视 歪国人写的 龙芯小组翻译的。。
icedx
2015-04-21 17:51:44 +08:00
一天
hippoboy
2015-04-21 17:52:44 +08:00
书上讲的应付考试没问题....不难
zhujinliang
2015-04-21 18:13:16 +08:00
玩单片机的表示也是极少用汇编,用的最多的汇编指令估计是NOP。。。都在凑时序了。。。
到汇编层只有指令地址立即数寄存器之类的东西,字符串都是上层结构了,一般都不会用汇编去爬字符串
所谓的 调中断,实质是寄存器操作,而且调中断之前,你还得知道中断那头要访问哪些寄存器,相应地需要提前把内容准备好,这块又是操作系统的细节了
围绕 调用(CALL) / 中断 之类的,还有 栈 / 现场保护之类的问题
鼓捣汇编得知道CPU细节,每个指令/寄存器是干啥的,指令会影响哪些寄存器之类的

不过了解点汇编,会发现有些东西的实现其实挺有趣的,或者说出乎意料的简单
ryd994
2015-04-21 19:48:59 +08:00
我认为除了写内核和驱动中特别底层的部分,其他时候用汇编都是重复造轮子(尽管重复造轮子来学习有时很有效)
对性能再怎么有要求,用C也就够了。如果你反编译过自己的程序你就该发现,很多时候编译器优化比你更聪明。
真心不差这点,哪怕高级语言比汇编慢十倍,那也只是开销线性翻倍。碰上二逼程序员把O(n)写成O(n^2),那用什么语言都一样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX