文章吧-经典好文章在线阅读:《深入理解程序设计》的读后感10篇

当前的位置:文章吧 > 经典文章 > 读后感 >

《深入理解程序设计》的读后感10篇

2022-05-16 12:43:46 来源:文章吧 阅读:载入中…

《深入理解程序设计》的读后感10篇

  《深入理解程序设计》是一本由[美] Jonathan Bartlett著作,人民邮电出版社出版的平装图书,本书定价:49.00,页数:208,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。

  《深入理解程序设计》读后感(一):看到前三章的感受

  大概在2015年1月中旬买了这本书。截至目前看了前4章,准确的说第一张没怎么看,第二章略看了下,细看从第三章开始的。之前也算是由汇编语言编程经验。在第三章开始的那个小程序我感觉讲的很详细,非常适合初学者,一个二三十行的程序居然花了接近两页纸张来解释,连作者都承认了有点啰嗦,好吧,面向初学者可以理解。

  到了第4章函数那里我感觉,作者就有点不太靠谱了,讲到堆栈那里的时候再怎么也得配个插图什么的吧,文字叙述(也许是翻译的问题)也是很糟糕,反正把我看晕了,貌似在P36那里我还看见了一个小“错误”,也许是我理解有问题吧,反正我觉得那里有矛盾的地方。

  到后来还是去看《汇编语言程序设计》by Richard Blum写的那本书的关于函数那章才渐渐明了。而且后面配的那个示例我感觉完全不是给初学者看的。

  以上

  《深入理解程序设计》读后感(二):中文版勘误整理(首次阅读的同学一定要看下,省时省力避免被绕)

  坦率地讲中文版翻译得还是可以的,除了少数自己造成的错误外,更多的还是原版就有的问题(真是原汁原味),原版作为免费公开版,好处不言而喻,大家一起来挑错,不断完善,我除了自己发现的少数几个外,更多的是来源于作者论坛里各路同学的提示,有些特后面的章节我因为还没有看到,所以少数勘误没有写上(都阅读完会更新),但大多数已经放到下面,英语好的同学可以进这个网站里面再看一看,特别指出的是最好中英文叠着看,英语好直接原文看。初次阅读的同学一定要先照着修改一下,省事儿不是:)

  作者论坛勘误区:

  https://savannah.nongnu.org/bugs/index.php

  英文免费公开版下载区:

  勘误--------------------------------------------------------------------------------------

  8 倒数第3段 “地址的长度也是4字节(1个字长)”关于这块论坛一位做老师的网友曾经提出异议,说他教的都是2个字节为1个字长;结果被某位调侃老古董,某位的解释是决定字长的不是定义,而是当时处理器寄存器的大小,16位的自然是2个字节为1个字长,而32位的自然是4个字节为1个字长。

  8 第二大段中“65536”修改为“65535”

  10 倒数第1段 ”在直接寻址中,我们将只加载值4;但在间接寻址中,我们会用4作为地址去寻找数据“,关于这段话,作者论坛已有网友指出其语义模糊让人感觉间接寻址更像是直接寻址了。而直接寻址更像立即数模式了;他建议这么说”在直接寻址中,我们使用一个立即数模式下的数字作为地址用于发现我们想要的数据;在间接寻址中,我们被装载进一个被作为指针的寄存器中的数字,去引导我们找到想要的数据“

  在此我把原书有歧义的句子和网友修改过的句子都给出,英语好的同学(我很差)相信能看懂。

  原文:In direct addressing, we would just load the value 4, but in indirect addressing, we use 4 as the address to use to find the data we want".

  修改:"In direct addressing, we use an immediate mode number as the address to use to find the data we want. In indirect addressing, we use the number stored in a register as a pointer to the data we want."

  25 倒数第2行将 je end_loop 修改为 je loop_exit

  36 第1段 第2行 修改为将栈指针%esp复制到%ebp (书中给写反了)

  40 第1行 #将第1个参数放入%ebx (中文版和原版都写成了%eax)

  41 第10、11行底数和指数位置写反了,对调一下才是正确的。

  指数 <--- 12(%ebp)

  底数 <--- 8(%ebp)

  50 movl 500, %edx 和 movl 3, %eax 两个数字前都缺少了“$”,这个语句的错误之所以连原作者都没有发现,是因为这个段落仅仅是介绍,并没有实际编写程序

  59 倒数第4段有一段话,如果你按照这段话进行测试,会发现结果是错误的。”当Linux程序开始时,所有指向命令行参数的指针都存储于栈中。参数数目存储于8(%esp),程序名存储于12(%esp),而参数存储于16(%esp)及其后的存储位置“实际上这段话并没有错误,测试出错的原因在于作者没有明确地指出这个Linux程序就是本章的范例,这个范例中在程序开始执行时就用"subl $ST_SIZE_RESERVE, %esp",为该程序留出了8个字节的存储空间,以此类推的话上面的说法才成立,实际上%esp是随需求不断变化的,而初学者(比如我)很容易把上面的话当成”放之四海而皆准“的真理。作者论坛已经有网友指出,应该用”参数数目存储于0(%ebp),程序名存储于4(%ebp),而参数存储于8(%ebp)及其后的存储位置“来将这个概念固定化。希望大家能够借此理解作者要表述的概念。

  64 应注明读函数保存为read-record.s, 写函数保存为write-record.s

  67 第14行 缺少一个标示符: file_name:

  67 .globl _start 之前缺少.section .text , 作者的论坛有网友反映程序虽然能够正常使用,但是缺少这个伪指令会削弱调试能力,尤其是对gdb而言。

  68 倒数第5行 应该是as write-records.s -o write-records.o

  82 "jl continue_processing"修改为"jge continue_processing"用以表示如果返回值大于或等于0则说明没有错误,跳到继续运行标签处。

  88 中间的自然段中出现了两处int,由于作者在之前多次定义了int是系统调用(interrupt),而针对此处的int表示的意思是(integer)也没有特别说明,所以大家要注意别犯晕,其实在P89页作者会说明的,只不过应该放到前面说更好。

  177 中下部指令"movl %esp, $ebp"修改为"movl %esp, %ebp"

  178 原来要表达的是C语言中的while语句,条件a<b就继续循环;那么在汇编语言中的条件判断就必须是jle loop_end, 而不是jge loop_end;当然该上一条为cmpl %eax, %ebx 为cmpl %ebx, %eax也行。

  --------------------------------------------------------------------------------------

  《深入理解程序设计》读后感(三):一本非常棒的汇编入门书籍

  如果你想了解Linux汇编而又苦于不得其法的话,这本书绝对是你的最佳选择,看过多多本有关Linux或者IBM PC的汇编方面的书,觉得这本书是最容易让人理解的,也是讲的最清晰的,他没有让你陷入记住一条有一条的指令的泥淖之中无法自拔,最后让你望指令而兴叹,而是通过例子和不断的细化让你从程序理来理解和消化指令,在不知不觉中你已经学会了大部分通用的指令,这时候你再回头看看当初只看到指令一张就被折磨的扔掉的其他汇编书籍,你会觉得这本书是多么的棒。读罢本书你再去看Linux源代码里面那些汇编程序,你会发现自己已然可以读懂!通过学习这本书你会更加深刻的理解编程,更加深刻的理解丰富多彩的软件世界是由这一条条指令构成,不得不去感叹,软件——人类思想和智慧的结晶!

评价:

[匿名评论]登录注册

评论加载中……