×

汇编语言编程艺术PDF电子书免费下载

消耗积分:5 | 格式:pdf | 大小:4.30 MB | 2020-06-13

年纪青

分享资料个

  考虑到这是一本教汇编语言编程的书,是为大学水平的学生写的,由一个似乎知道他在说什么的人写的,你的自然倾向是相信某些东西,如果它出现在印刷品上。刚读了上面的内容,您就开始假设程序集一定很糟糕。亲爱的朋友,这是汇编语言百分之八十的问题。也就是说,人们根据从朋友、导师、文章和书籍中听到的信息,对汇编语言产生了一些非常强烈的误解。哦,汇编语言当然不完美。它确实有许多真正的缺点。然而,这些错误被那些不熟悉汇编语言的人完全夸大了。下一次当有人开始鼓吹汇编语言的坏处时,问“你有多少年的汇编语言编程经验?”当然,如果你不知道,汇编是很难理解的。令人惊讶的是,有多少人愿意只根据他们的对话或读过的文章就公开反对汇编语言。汇编语言用户也使用高级语言(HLLs);汇编语言最直言不讳的反对者很少使用HLLs。你相信谁,一个精通这两种编程语言的专家,或者一个从来没有花时间学习汇编语言并对其能力形成诚实看法的人?在与某人的谈话中,我会不遗余力地解决上述每一个问题。事实上,在这一章的草稿中,我花了大约十页的时间来解释上面每一个陈述的错误。然而,这本书已经够长了,我觉得在这些问题上继续下去所获得的收获是微乎其微的。尽管如此,对上述每一点进行简短的反驳是有必要的,如果不是因为其他原因,只是为了让你不要认为这些言论没有正当的辩护理由。

  组装很难学。你不知道的语言也是。尝试学习(真正的学习)APL、Prolog或Smalltalk。一旦学习了Pascal,学习另一种语言(如C、BASIC、FORTRAN、Modula-2或Ada)就相当容易了,因为这些语言与Pascal非常相似。另一方面,学习像Prolog这样不同的语言并不是那么简单。汇编语言也与Pascal有很大不同。它将比其他类似帕斯卡语的语言更难学习。然而,学习汇编并不比学习第一门编程语言困难多少。汇编很难阅读和理解。当然,如果你不知道的话。大多数发表这一声明的人根本不了解assembly。当然,编写不可能读懂的汇编语言程序是很容易的。编写不可能读取的C、Prolog和APL程序也很容易。有了经验,你会发现汇编和其他语言一样容易阅读。程序集很难调试。与上述论点相同。如果你没有太多调试汇编语言程序的经验,那就很难调试它们。还记得在你的第一个Pascal(或其他HLL)程序中发现bug是什么感觉吗?每当你学习一种新的编程语言时,在获得经验之前,你在调试该语言的程序时都会遇到问题。装配很难维护。C程序很难维护。事实上,程序很难维持一段时间。缺乏经验的汇编语言程序员往往编写难以维护的程序。编写可维护的程序不是一种天赋。这是你通过经验发展出来的技能。汇编语言很难。这句话其实是有道理的。很长一段时间以来,汇编语言程序员完全从头开始编写程序,通常是“重新发明轮子”。HLL程序员,特别是C、Ada和Modula-2程序员,长期以来一直享受着标准库包的好处,该包解决了许多常见的编程问题。另一方面,众所周知,汇编语言程序员每次需要整数输出例程时都会重写它。这本书不采用这种方法。相反,它利用了加州大学河滨分校(University of California,Riverside)为80x86汇编语言程序员提供的UCR标准库所做的一些工作。这些子程序简化了汇编语言,就像C标准库帮助C程序员一样。图书馆的源代码列表可以通过互联网和各种其他通信服务以及配套的软盘以电子方式获得。汇编语言编程很费时。软件工程师估计开发人员只花了大约百分之三十的时间编写问题的解决方案。即使用汇编语言编写一个程序比用HLL语言编写一个程序花了两倍的时间,项目的总完成时间也只有15%的差异。事实上,好的汇编语言程序员不需要两倍的时间来实现汇编语言。使用HLL确实会节省一些时间;但是,节省的时间不足以抵消使用汇编语言的好处。改进的编译器技术消除了对汇编语言的需求。这不是真的,也许永远不会是真的。优化编译器每天都在变得更好。然而,汇编语言程序员通过编写不同于使用HLL的代码来获得更好的性能。如果汇编语言程序员用C语言编写程序,然后手工将它们翻译成汇编语言,那么一个好的C编译器将产生等效的,甚至更好的代码。那些宣称编译器技术的人正在比较他们手工编译的代码和编译器生成的代码。编译器在编译方面比人类做得好得多。再说一遍,你永远不会发现汇编语言程序员在写“带MOV指令的C代码”,毕竟,这就是你使用C编译器的原因。今天,机器太快了,我们不再需要组装了。令人惊讶的是,人们会花很多钱买一台比自己拥有的机器稍快的机器,但他们不会花额外的时间在汇编中编写代码,因此它在同一硬件上运行得更快。关于机器的速度和软件的速度有很多激烈的争论,但有一个事实仍然存在:用户总是想要更高的速度。在任何给定的机器上,最快的程序都将用汇编语言编写。如果你需要更快的速度,你应该使用更好的算法,而不是切换到汇编语言。为什么你不能在汇编语言中使用这个更好的算法呢?如果你已经在使用你能找到的最好的算法,而且它仍然太慢呢?这是一个完全错误的反对汇编语言的论点。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'汇编语言编程艺术PDF电子书免费下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);