V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
NewYear
V2EX  ›  问与答

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

  •  
  •   NewYear · 2015-04-21 15:40:55 +08:00 · 6385 次点击
    这是一个创建于 3507 天前的主题,其中的信息可能已经有所发展或是发生改变。
    随手搜索的,搜到这个入门知识(仗着自己有点编程基础以为至少能入个门摸索一下吧)
    http://www.blogjava.net/wxqxs/archive/2009/09/17/277328.html

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

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

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

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

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

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

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

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

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

    不过了解点汇编,会发现有些东西的实现其实挺有趣的,或者说出乎意料的简单
    ryd994
        20
    ryd994  
       2015-04-21 19:48:59 +08:00 via Android   ❤️ 1
    我认为除了写内核和驱动中特别底层的部分,其他时候用汇编都是重复造轮子(尽管重复造轮子来学习有时很有效)
    对性能再怎么有要求,用C也就够了。如果你反编译过自己的程序你就该发现,很多时候编译器优化比你更聪明。
    真心不差这点,哪怕高级语言比汇编慢十倍,那也只是开销线性翻倍。碰上二逼程序员把O(n)写成O(n^2),那用什么语言都一样。
    tioover
        21
    tioover  
       2015-04-21 19:54:22 +08:00   ❤️ 1
    楼主你去看《深入理解计算机系统》吧,汇编实际上就是 C 费了点劲
    icedx
        22
    icedx  
       2015-04-22 10:11:57 +08:00 via Android   ❤️ 1
    我还是说说吧…
    现在几乎没有所谓纯粹的汇编…
    用的比较多的是游戏开发中的性能优化…
    具体就是对编译器生成的中间件进行人工优化…
    真要手撸汇编…
    也是特别高端的应用…
    比如动车组的控制系统…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:50 · PVG 21:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.