刚才去看了下汇编入门知识,弱弱的问下,你们入门入了多久。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NewYear
V2EX    问与答

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

  •  
  •   NewYear 2015-04-21 15:40:55 +08:00 7162 次点击
    这是一个创建于 3901 天前的主题,其中的信息可能已经有所发展或是发生改变。
    随手搜索的,搜到这个入门知识(仗着自己有点编程基础以为至少能入个门摸索一下吧)
    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  
       015-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     Solana     2677 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:09 PVG 23:09 LAX 07:09 JFK 10:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86