V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
laomutuo
V2EX  ›  程序员

现在还有人学汇编么?

  •  
  •   laomutuo · 2015-02-03 08:17:19 +08:00 · 18941 次点击
    这是一个创建于 3573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    学了汇编能干啥?
    高级语言都学不过来了,各种框架啥的,这年头还有人学汇编语言么?
    为何学它?

    亲们,给偶个学汇编的理由吧:)

    131 条回复    2015-03-18 10:52:22 +08:00
    1  2  
    way2exluren
        1
    way2exluren  
       2015-02-03 08:24:20 +08:00 via Android
    写c程序,有时候要内嵌汇编。恶意代码分析的时候要反汇编看汇编代码。还是c有时候bug不好找,会看生成的汇编代码
    codegear
        2
    codegear  
       2015-02-03 08:26:47 +08:00 via Android
    逆向工程不得不看汇编
    bluecubic
        3
    bluecubic  
       2015-02-03 08:28:52 +08:00 via iPhone
    年代久远的嵌入式设备
    laomutuo
        4
    laomutuo  
    OP
       2015-02-03 08:33:51 +08:00
    @codegear 搞逆向的人很少吧?
    Panic
        5
    Panic  
       2015-02-03 08:37:36 +08:00
    https://www.google.co.jp/search?q=site:v2ex.com/t+%E5%B5%8C%E5%85%A5%E5%BC%8F&qscrl=1&gws_rd=cr,ssl&ei=vhfQVMXlOIjf8AW6toGwCg

    上面的至少 30% 需要汇编把。不过现在汇编应该主要作为一种工具吧, 不到万不得已不会有谁想用的。
    booboo
        6
    booboo  
       2015-02-03 08:37:40 +08:00
    图像算法优化的时候也是需要汇编的。
    sbboy
        7
    sbboy  
       2015-02-03 08:38:15 +08:00
    我有一朋友学汇编是为了泡妞
    laomutuo
        8
    laomutuo  
    OP
       2015-02-03 08:40:31 +08:00
    @sbboy 求妞照片:)
    laomutuo
        9
    laomutuo  
    OP
       2015-02-03 08:41:02 +08:00   ❤️ 1
    @booboo 用它干啥?
    exch4nge
        10
    exch4nge  
       2015-02-03 08:49:26 +08:00
    学校学的8位还是16位汇编,学完了搞搞历史悠久的硬件还是可以的,也有助于理解计算机怎么运行的。

    工作上能用到的汇编,除了某些搞硬件的接触(现在大部分都是高级语言了)外,像楼上说的搞逆向工程,病毒分析,漏洞挖掘,还有想把某些代码变高效用内嵌汇编,Debug时看汇编,搞内核方面也用到汇编等等。

    如果对底层没兴趣,也不会在这方面研究或就职,那就不用看了。

    现在各种语言与框架确实很多,但有些经典的语言或框架,你学会了之后即使以后不用,也对你有很大的帮助,多学学无害处。
    exch4nge
        11
    exch4nge  
       2015-02-03 08:51:07 +08:00
    哦,貌似一些3D渲染中使用的 高级shader 也是用汇编写的。
    zgxltxz
        12
    zgxltxz  
       2015-02-03 08:57:08 +08:00 via Android
    在学
    ruchee
        13
    ruchee  
       2015-02-03 09:02:38 +08:00
    在复习中,为的是看懂C/OC的调试信息
    zjgood
        14
    zjgood  
       2015-02-03 09:05:15 +08:00 via Android
    加密解密要用到。去看雪看看吧
    tabris17
        15
    tabris17  
       2015-02-03 09:07:47 +08:00
    反编译、crack、调试都需要用到
    Claud
        16
    Claud  
       2015-02-03 09:10:35 +08:00
    每天都要看汇编的人默默飘过……
    1023400273
        17
    1023400273  
       2015-02-03 09:14:48 +08:00
    @sbboy 求指导,学汇编如何泡妞
    wizardoz
        18
    wizardoz  
       2015-02-03 09:19:16 +08:00
    我说学着玩可以吗?其实个人感觉从理念上汇编和C没有太多区别,只不过要自己处理函数栈。
    qq446015875
        19
    qq446015875  
       2015-02-03 09:19:24 +08:00 via Android
    逆向工程少不了汇编的,还有对时间要求很高的场合,我记得好像dsp就得用汇编吧
    kisshere
        20
    kisshere  
       2015-02-03 09:24:00 +08:00 via Android
    用电话01键写代码的飘过
    Loop680
        21
    Loop680  
       2015-02-03 09:35:43 +08:00
    @kisshere 用钢针戳光盘刻代码的笑而不语。
    onemoo
        22
    onemoo  
       2015-02-03 09:38:01 +08:00
    即便不搞硬件、不搞嵌入式、不写汇编,但在debug C/C++时还是会用到的。
    akin520
        23
    akin520  
       2015-02-03 09:38:47 +08:00
    必须有呀
    bugeye
        24
    bugeye  
       2015-02-03 09:52:02 +08:00
    C语言=宏汇编,C语言想学得好,汇编是基础。

    当年MFC那屎一样的框架把我逼得去用汇编写win32 GUI。
    ChiChou
        25
    ChiChou  
       2015-02-03 10:01:08 +08:00
    @laomutuo 做二进制安全搞逆向的人多了去了
    ryd994
        26
    ryd994  
       2015-02-03 10:06:57 +08:00
    其实说高性能用汇编也是弊大于利,维护太麻烦了,坑太多。这年头编译器优化太厉害了。
    玩单片机,以前老觉得用汇编可以用一些自己trick,性能会好很多。最近转用C重写,然后看反编译发现和我手动写差不了多少,甚至有些地方的优化我自己都没想到,只能说编译器太牛了。

    但是学一下我还是觉得有好处的,对底层的理解好很多。
    solome
        27
    solome  
       2015-02-03 10:08:46 +08:00
    看《瘋狂的程序員》的時候特別想重新拾起之前學習的匯編,最後沒動力堅持下去哈。。。
    soundofu
        28
    soundofu  
       2015-02-03 10:11:51 +08:00
    当然需要,基本做嵌入式开发的,写C的,搞深入一点都会要学汇编,很多算法和性能优化时候必须要上汇编。
    crab
        29
    crab  
       2015-02-03 10:14:00 +08:00
    @solome 作者都蹲进去了。
    fnmsd
        30
    fnmsd  
       2015-02-03 10:17:21 +08:00
    逆向工程啊~~破解软件啊~
    wdlth
        31
    wdlth  
       2015-02-03 10:23:38 +08:00
    我搞嵌入式是要学的……
    Neveroldmilk
        32
    Neveroldmilk  
       2015-02-03 11:08:07 +08:00
    不要说逆向工程了,有些时候发现程序bug,还是要看寄存器和汇编指令的。
    lsmgeb89
        33
    lsmgeb89  
       2015-02-03 11:09:21 +08:00
    汇编有时候还是需要的,也打算学下。
    special
        34
    special  
       2015-02-03 11:24:10 +08:00
    学校必修课,要考试。
    laomutuo
        35
    laomutuo  
    OP
       2015-02-03 11:30:06 +08:00
    @Neveroldmilk 大神能告诉我i3有几个寄存器么:)
    laomutuo
        36
    laomutuo  
    OP
       2015-02-03 11:31:58 +08:00
    @crab 学汇编,蹲进去啥意思?敲代码还要看姿势?
    laomutuo
        37
    laomutuo  
    OP
       2015-02-03 11:33:32 +08:00
    @ryd994 你用汇编写过的程序有多少行的?
    duanyu47
        38
    duanyu47  
       2015-02-03 11:38:25 +08:00
    不学汇编怎么搞破解。。
    pheyer
        39
    pheyer  
       2015-02-03 11:42:34 +08:00
    @codegear 逆向工程+1
    booboo
        40
    booboo  
       2015-02-03 11:57:57 +08:00
    图像处理算法热点的地方有时候会反汇编后基于汇编做优化。
    sbboy
        41
    sbboy  
       2015-02-03 11:59:45 +08:00
    @1023400273 具体我也不了解啊。。。就是有个妹子会汇编,我的朋友想和她有点共同语言。。。
    sbboy
        42
    sbboy  
       2015-02-03 12:00:13 +08:00
    @laomutuo 我也没见过,只是听朋友说起过。。。
    codegear
        43
    codegear  
       2015-02-03 12:02:55 +08:00
    @laomutuo 我周围确实没见到做逆向工程的……

    @pheyer 哈哈,现在做逆向的人好少
    nullizer
        44
    nullizer  
       2015-02-03 12:05:27 +08:00
    一般人学了汇编虽然不容易用上,很容易就忘记细节。但是CS学生不学心里不会踏实的,学了之后至少心里有底,对整个编程生涯都有好处
    laomutuo
        45
    laomutuo  
    OP
       2015-02-03 12:06:44 +08:00
    @booboo 先用c实现,生成汇编,然后改汇编代码么?
    laomutuo
        46
    laomutuo  
    OP
       2015-02-03 12:09:11 +08:00
    @pheyer 做逆向,就是搞破解么?从小白变成破解大神,要学多久?
    DingSoung
        47
    DingSoung  
       2015-02-03 12:19:21 +08:00
    有啊,现在工作经常写汇编
    laomutuo
        48
    laomutuo  
    OP
       2015-02-03 12:20:41 +08:00
    @dingsoung 知道i3有几个寄存器么?你都学过哪些指令呢?
    pheyer
        49
    pheyer  
       2015-02-03 12:23:01 +08:00
    @laomutuo 不一定是搞破解啊,有时候就是想偷别人的一点东西,哈哈
    DingSoung
        50
    DingSoung  
       2015-02-03 12:25:12 +08:00
    @laomutuo 不是X86汇编,是FPGA模拟CPU核的汇编
    caomaocao
        51
    caomaocao  
       2015-02-03 12:37:04 +08:00
    如果搞嵌入式底层,还是需要的。
    726332269
        52
    726332269  
       2015-02-03 12:52:47 +08:00
    用来做系统开发,很好玩的,汇编应该算是最有趣的语言。
    Bairrfhoinn
        53
    Bairrfhoinn  
       2015-02-03 13:47:20 +08:00
    貌似汇编语言编写各种硬件的驱动程序也用的不少,什么显卡驱动、声卡驱动、网卡驱动等,都会或多或少用到这门语言……
    jedihy
        54
    jedihy  
       2015-02-03 13:48:55 +08:00
    尼玛,调试程序不懂汇编调试个蛋?不懂汇编计算机怎么工作的知道个蛋?不懂汇编优化个蛋?不懂汇编的编程,花式码字而已。
    可惜我也只会花式码字。。。
    dagger
        55
    dagger  
       2015-02-03 13:49:09 +08:00
    即便是不带操作系统的嵌入式,用到汇编的地方也很少了,现在我基本只在bootloader的引导部分和内核里一些需要稍微hack一下的地方才会看到汇编,而且很多指令在内核代码里都会被简单包装成一个c api再拿去用的
    汇编对开发和维护都是噩梦,在现在这个时代还想成气候几乎不可能
    laomutuo
        56
    laomutuo  
    OP
       2015-02-03 13:51:13 +08:00
    @pheyer 哈哈,用汇编还能偷东西?你是黑客?
    laomutuo
        57
    laomutuo  
    OP
       2015-02-03 14:05:39 +08:00
    @dingsoung 你是硬件工程师?
    模拟的是什么cpu?
    DingSoung
        58
    DingSoung  
       2015-02-03 14:11:08 +08:00
    @laomutuo 我只是个写软件的小码农.
    阉割版的51核,做了很多客制化
    scusjs
        59
    scusjs  
       2015-02-03 14:12:42 +08:00
    @laomutuo 巨汗。。。偷代码、接口啥的啊
    txlty
        60
    txlty  
       2015-02-03 14:19:00 +08:00
    如果没人学汇编,那么每年那么多 操作系统 和 编程语言 的漏洞,是谁爆出来的?一群老头子?
    soundofu
        61
    soundofu  
       2015-02-03 14:19:14 +08:00
    @dingsoung 朋友做白电的么?阉割的51做客制化似乎要很大的出货量支持啊!
    DingSoung
        62
    DingSoung  
       2015-02-03 14:26:57 +08:00
    @soundofu 做烧录器的
    liukun
        63
    liukun  
       2015-02-03 14:34:59 +08:00
    没有汇编,难道你的CPU认识Java,Python,PHP?所谓编译-汇编-链接,没有人学汇编语言,码农们还怎么玩?
    publicID123
        64
    publicID123  
       2015-02-03 15:03:18 +08:00
    码农:对汇编一窍不通。只能写脚本级代码。属于行业苦力。
    工程师:能看懂汇编,用于软件调试,维护,性能优化。
    科学家:精通汇编。用于编写操作系统、发明编程语言。
    码农当然是不学的。大部分人也没学过,毕竟苦力是大多数。
    ioth
        65
    ioth  
       2015-02-03 15:17:53 +08:00
    91年考高程,asm是必须,不知道现在怎么样了。
    easing
        66
    easing  
       2015-02-03 15:20:07 +08:00
    没想到能扯的人还不少。。。上面说的有几个在这个月碰过汇编?都在说别人,是的,搞逆向搞安全的需要,但你自己需要搞么,是的,搞图形的需要,但现在carmack都不在汇编层优化了,你在搞?搞嵌入式的,我说lz根本不在这一行吧?而且在现在安卓一统天下的时候要学的也不是x86而是smali啊。对于国内80%都在做应用层的码农,搞啥子汇编啊。
    当然汇编还是需要学的,了解计算机在对程序员提供的最基本抽象层有时候是很有帮助的。最好自己实现一个X86的或者一个基于栈的简单虚拟机,都不会超过500行,但我觉得也就仅此而已了。
    youyang
        67
    youyang  
       2015-02-03 15:20:34 +08:00
    一年前搞crack研究过。
    acros
        68
    acros  
       2015-02-03 15:22:02 +08:00 via iPhone
    这东西和算法一样,平时上班可能没啥用,关键时刻就能甩别人十条街。
    llb123
        69
    llb123  
       2015-02-03 15:27:10 +08:00 via Android
    信号与系统要学貌似
    POP
        70
    POP  
       2015-02-03 15:28:43 +08:00
    学汇编,有妞泡?求介绍!
    acros
        71
    acros  
       2015-02-03 15:31:39 +08:00
    看这个:
    acros
        72
    acros  
       2015-02-03 15:32:16 +08:00
    http://blog.codingnow.com/2014/11/rla_format.html#comments
    多一项技能,多了一个解决方案的能力。
    我汇编不行,看到那部分就卡住了···
    LovingYoung
        73
    LovingYoung  
       2015-02-03 15:39:05 +08:00
    上学期刚考完.
    pheyer
        74
    pheyer  
       2015-02-03 16:10:52 +08:00
    @laomutuo 我偷别人的算法,思路行不?
    andy1987
        75
    andy1987  
       2015-02-03 16:26:57 +08:00
    有,某些行业离不开汇编,不过现在学的更多的都是win32汇编了,以前at&t,8086的汇编应该学的人相对少了
    andy1987
        76
    andy1987  
       2015-02-03 16:28:17 +08:00
    学汇编的理由其实很简单,如果你向更深入的了解别人的程序
    像一些做安全软件的底层分析员,汇编都是必备的还有那些一天到晚面对调试器的童鞋们
    laomutuo
        77
    laomutuo  
    OP
       2015-02-03 16:30:57 +08:00
    @dingsoung 51单片机么?为何要用fpga模拟呢?直接买个51不行?
    51这么弱的处理器不能叫cpu吧?
    laomutuo
        78
    laomutuo  
    OP
       2015-02-03 16:39:19 +08:00
    @soundofu 白电是啥?为何要把51阉割了?
    @txlty 操作系统漏洞和汇编有啥关系?把操作系统反编译成汇编,一行行读,发现漏洞?
    @publicID123 据我所知操作系统都是用C写的,你说的汇编貌似很少啊,科学家才不用汇编呢,码农用:(科学家用C写10行代码,码农要用汇编写一天呢:)
    @ioth 你现在还用汇编么?
    @youyang 你要crack什么软件?
    @pheyer 给你个windows,你看汇编,能知道windows是怎么实现的么?
    @andy1987 这三种汇编,都要学一遍么?
    commyleung
        79
    commyleung  
       2015-02-03 16:39:57 +08:00
    有时候我很羡慕程序,可以把自己的IDEA做出来。
    laomutuo
        80
    laomutuo  
    OP
       2015-02-03 16:40:51 +08:00
    @commyleung idea写java的,和汇编有关系?
    pheyer
        81
    pheyer  
       2015-02-03 16:41:36 +08:00
    @laomutuo 你这厮明显就是把问题极端化了,我吃饱了撑的去研究windows怎么实现的?够用就行
    pheyer
        82
    pheyer  
       2015-02-03 16:43:07 +08:00
    @commyleung 就是这样啊,我本来不会做游戏的,可是有idea一直在我的脑海里萦绕,然后就自学游戏开发把游戏做出来了,当然是小游戏了
    xieyudi1990
        83
    xieyudi1990  
       2015-02-03 16:46:57 +08:00
    大学期间学的汇编:
    8051 HCS12 x86 ARMv7 PIC18 MIPS32
    laomutuo
        84
    laomutuo  
    OP
       2015-02-03 16:48:31 +08:00
    @pheyer 游戏在哪里?偶瞧下:)
    xieyudi1990
        85
    xieyudi1990  
       2015-02-03 16:48:44 +08:00
    @dingsoung 为什么要是51呢? MIPS岂不更简单?
    ybh37
        86
    ybh37  
       2015-02-03 16:49:43 +08:00
    crack、某些驱动需要啃汇编代码。
    不装了,真的不会写,只能看懂简单的,知道怎么改。
    pheyer
        87
    pheyer  
       2015-02-03 16:50:46 +08:00
    @laomutuo 暂时保密哈哈
    soundofu
        89
    soundofu  
       2015-02-03 17:01:13 +08:00
    @laomutuo 刚才我说的意思是"白色家电", 价格竞争非常激烈, 由于出货量都是kk级别的, 所以对成本非常在意. 所以靠着量大,甚至可以把51阉割掉一些功能等定制, 以追求0.x元的成本下降.
    laomutuo
        90
    laomutuo  
    OP
       2015-02-03 17:21:39 +08:00
    @xieyudi1990 mips很复杂的,好伐:) sun不是有服务器cpu用mips做的么?
    DingSoung
        91
    DingSoung  
       2015-02-03 17:28:30 +08:00
    @laomutuo 不是为了模拟而模拟,是为了控制收发数据,编写协议,自定义接口,而且现有的MCU速度太.
    leavic
        92
    leavic  
       2015-02-03 17:57:13 +08:00
    做底层不学汇编就是渣
    xieyudi1990
        93
    xieyudi1990  
       2015-02-03 18:03:31 +08:00
    @laomutuo 指令集, 执行单元, 比51要简单啊. 当然如果你是用别人的IP核那就无所谓了.
    Artotria
        94
    Artotria  
       2015-02-03 18:43:41 +08:00
    周经帖
    chiu
        95
    chiu  
       2015-02-03 18:55:07 +08:00
    因为......考试要考
    Neveroldmilk
        96
    Neveroldmilk  
       2015-02-03 19:12:03 +08:00
    Intel有专门的白皮书介绍每款型号CPU的寄存器和指令集详细支持情况的,不是做底层指令优化的额很多高级指令集和寄存器都用不到,但是可以用来参考。http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
    laomutuo
        97
    laomutuo  
    OP
       2015-02-03 19:26:42 +08:00
    @xieyudi1990 为何简单执行速度却比51的快很多呢?
    51好像不能跑linux吧?貌似连操作系统都跑不了:(
    可是简单的MIPS为何可以跑Solaris, Linux呢?
    chineselittleboy
        98
    chineselittleboy  
       2015-02-03 20:38:20 +08:00
    @kisshere 大神你是做什么的~~
    wezzard
        99
    wezzard  
       2015-02-03 21:24:03 +08:00
    @ioth 看成91年高考了……
    xieyudi1990
        100
    xieyudi1990  
       2015-02-03 21:25:25 +08:00
    @laomutuo 51本来是35年前为多周期-微码的CISC设计的. 现在只是为了软件兼容性 (一帮人只会51怎么办? 手里只有51的binary怎么办?) 而被ATMega或STC改成了流水线执行.
    RISC指令少而且划分得很规则, 能够很好得适应流水线执行. 近些年新上的嵌入式架构基本都是RISC的.

    你可以把8051的复杂度, 和MIPS或者Cortex-M0之类的复杂度做对比.

    这个, 和能不能跑Linux没有关系. PIC32就是基于MIPS的单片机.
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2086 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.