只有谦卑,将自己视为虫子,我才能变得更强。

人往往喜欢抱团,往往认为只要人多了,什么事情都是可以解决的。

这其实并无错误,大刘的乡村教师就有一段很有意思的描述,大体意思如下,人类的交流信息速度仅仅为10B/S,竟可以发展出B4级文明。

为什么,因为有教师的存在,教师站在人类的历史积淀上让后人不用再一日复一日地重复承受造轮子的痛苦。

常常有人说,教师是一项伟大而神圣的职业,这并没有错误,因为每个人都扮演着教师这个角色!

不多言废,继而述正。

我还是打算在阅读完全部的内容之后,再专门写专栏来写笔记的,但是又感觉要是后面再统一写,这段时间写博客的时候又感觉很空虚。所以,还是逐步写起来吧。

基础概念:

MASM:Microsoft Macro Assembler 微软宏汇编器

TASM:Turbo汇编器

NASM:Network汇编器

MASM2:MASM的一种变体

GAS:GNU汇编器

NASM&GAS基于Linux

有人说使用语言,从根本上来说,是我所犯的极大错误。但是我真的认为有能力讨论底层细节,才可以为严肃的计算机程序员写书。

汇编器是一种工具程序,用于将汇编语言源程序转化为机器语言。

链接器是一种工具程序,用于将汇编器生成的单个文件组成为一个可执行文件。

调试器:提供在程序运行时单步执行程序并检查寄存器和内存状态。

机器语言和汇编语言之间的联系

机器语言包含用短助记符如ADD,MOV,SUB,CALL书写的语句。

汇编语言和机器语言一一对应

高级语言与汇编语言关系为一对多

寄存器(register)是CPU中被命令的储存位置,用于保存操作的中间结果。

大多数汇编语言规则都是以目标处理器及其机器语言的物理性质为基础的,如CPU要求两个指令操作数大小相同。

与C++与java相比,汇编语言的规则相对较少,因为前者使用语法规则来减少意外的逻辑错误,而这是以限制底层数据访问为代价。

汇编语言可以很容易绕过高级语言的限制性特征,但同时提高了调试的难度。

虚拟机:虚拟机可以定义为一个软件程序,用来模拟一些其他物理或者虚拟计算机的功能。

机器语言(L0):每条指令均简单到可以用相对少量的电子电路来执行

-------------------------为了让愚蠢的人类能够更方便的编写和调试代码--------------------------

L1:L1编写的程序需要翻译/解释后才能执行。

常见的高级语言虚拟机的结构如下:

  • Level 4 高级语言

  • Level 3 汇编语言

  • Level 2 指令集架构(ISA:Instruction Set Architecture)机器语言

  • Level 1 数字逻辑

    每一层运行的代码都是通过翻译/解释从而转化成更低一层的代码,直到某层虚拟机被当成真实计算机予以实现,则在该层直接执行。

无符号数的算数运算其实真的不难,一般有点意思的就是含符号数的算数运算,这点其实一直困扰着我,虽然考试考不倒我,但是真的,对于我这个智商,不纳入我的知识框架的内容,我会本能上抗拒。

因为当时众多学习仅仅是就事论事而已,而如今,我希望抽丝剥茧地看待问题,看清楚一切的本质。然而一旦我希望抽丝剥茧地看待问题时,这些基础的问题,我必须要如水晶般透彻。

负整数用补码(two's complement)表示时,使用的数学原理是一个整数的补码是其加法逆元。

(一个数与其加法逆元相加,结果为0)

补码的思想就是避开变化,拥抱本质,对处理器设计者极有用,有了它就不需要用两套独立的电路来分别处理加法和减法。

加法逆元的思想并不仅仅适用于二进制运算,更适应于所有二进制运算,思路永远是相通的。

运算符优先级

无论是哪种设计,都不会故意将事情设计得更加复杂来给自己增加麻烦。相对的,在给别人讲解的时候,一些人会可以使用一堆自创的时髦术语来刷自己的存在感,大多都是这样。

就好比^和&和|这三个位运算符的优先级问题,毫无疑问^的优先级是最高的,因为如果不是,常规^A&^B的表示就需要顾虑到优先级的问题,就需要添加太多冗杂的括号。另外,&和|的执行顺序我不用查都知道一定是从左到右依次执行,不然这套规则的设计者估计自己都会弄不清楚到底该怎么结合。很多时候就是这样,当你弄不清楚执行顺序的时候,想想如果是你,你会怎么弄,怎么弄最简单,设计者的智慧一定在我等之上,这点问题一定考虑过的,不然,设计者也太弱了,也没有必要去使用他的一套规则不是吗。

三套编码规则

ASCII:American Standard Code for Information Interchange

ANSI字符集:American Nation Standard InterChange

Unicode:常见的文件编码格式,用于技工一种定义文字和符号的通用方法,包含UTF-8,UTF-16,UTF-32

我仍记得,在上学期间,当时反复说’A‘,’a‘的ASCII码都是常识,你们总要记住吧,不然别说你们是学计算机本科出生的。

很多教师真的很有意思,总是告诉你他们认为重要的东西,却从不把他们认知这些的方式告诉你。

0~31的字符代码被称为ASCII控制字符。简单地说,就是用于输出字符串时控制字符样式的。

32~64是常用标点符号,其中32是空格。

65(16进制为41)开始26个字符为大写字母。

97(16进制为61)开始26个字符为小写字母。

大小写字符间夹杂着几个用以凑序列的字符,这些字符有种为了这规律而存在的感觉。

开发日记-20190502 关键词 汇编语言(一)相关推荐

  1. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  2. 开发日记-20190515 关键词 汇编语言(八) MVVM

    PART 杂谈 现在是晚上8点14分,刚刚下班,最近刚刚一个项目完成了,其实很多时候,我真的感觉我们的项目缺乏挑战性,所以现在很多时候我仅仅是把自己当成一个成长中的代码美容师比较贴切一些. 最近其实真 ...

  3. 开发日记-20190501 关键词 汇编语言(启动) 基于x86处理器

    我不太喜欢我的大学生活,因为最后并没有按照我的想法继续发展下去,不过,事情都已经过去了,再去懊恼不是仅仅给自己徒增烦恼和给未来形成阻碍吗? 我仍记得大学有一门噩梦般的课程,为什么称之为噩梦,因为那时候 ...

  4. 开发日记-20190915 关键词 汇编语言王爽版 第十一章

    第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...

  5. 开发日记-20190915 关键词 汇编语言王爽版 第十章

    第十章 CALL和RET指令 call 和ret指令都是转移指令,他们都修改IP,或同时修改CS和IP.他们经常被共同用来实现子程序的设计. 10.1 ret和retf ret指令用栈中的数据,修改I ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第九章

    第九章 转移指令的原理 可以修改IP或同事修改CS和IP和指令统称为转移指令.概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086CPU的转移行为有以下几类: 只修改IP时,称为段 ...

  7. 开发日记-20190914 关键词 汇编语言王爽版 第四章

    第四章 第一个程序 4.1 一个源程序从写出到执行的过程 第一步:编写汇编源程序 使用文本编辑器,用汇编语言编写汇编源程序 这一步工作的结果是产生一个储存源程序的文本文件. 第二步:对源程序进行编译程 ...

  8. 开发日记-20190913 关键词 汇编语言王爽版 第一章

    Preface 最近手机坏了,感觉心里挺不是滋味的,在各种方面,特别是钱!直到今天,我才知道钱真的是一种很重要的东西,以及苹果公司到底有多恶心. 真的很奇怪,为什么世界上就没有任何一家公司能和苹果公司 ...

  9. 开发日记-20190514 关键词 汇编语言(七)

    常常有这种冲动,想花钱= =,但是总感觉充游戏这类的毒品性消费又太过于无趣了,因为我还是很喜欢物质的那种存在感,所以还是喜欢买书.最近发现一个很令人无语的事实,就是貌似我读书的速度大概是我买书的速度的 ...

最新文章

  1. 算法原理:大数据处理的分治思想!
  2. python自己写包_Python将自己写的模块进行打包
  3. (九)栈上分配与逃逸分析
  4. 上周热点回顾(12.8-12.14)
  5. ubuntu18docker下安装MySQL
  6. 聚数引智,承德大数据产业对接交流会将于2019中国国际数字经济博览会期间召开...
  7. [面试] C/C++语法(三)—— 字符串
  8. jmeter-Java关于MD5加密方法 以及16位32位互转
  9. Python数据分析U3-matplotlib可视化高级
  10. Picgo 水印制作教程
  11. 大型客户关系管理系统源码CRM
  12. 当地的新员工入职培训
  13. Cesium之地图清晰度解决方案
  14. 分号与逗号的区别及举例_怎样区别顿号、逗号和分号
  15. matlab工具箱三维还原原理,matlab三维重建工具箱
  16. 微信小程序getuserinfo废弃
  17. CSDN之博客积分规则
  18. 51单片机 DHT11+LCD1602温湿度显示 + Proteus仿真
  19. 袖珍电子书打先锋,魔灯(Moodle)服务器做后盾
  20. php写入日志到文件

热门文章

  1. 机器学习hierarchical clustering_ICLR 2020 | 反事实因果理论如何帮助深度学习?
  2. MySQL下载与配置
  3. mxnet java 例子_mxnet(gluon) 实现DQN简单小例子
  4. java内置_自包含的应用程序,内置Java
  5. python中的浮点数用法_如何利用Python在运算后得到浮点数值的方法详解
  6. 计算机知识新闻稿,文科计算机大赛新闻稿
  7. node mysql 连接池 超时,关于NodeJS中mysql连接池卡死问题
  8. php过滤数据库就报错,php过滤掉emoji等无法存入MySQL数据库的字符简单示例
  9. 单招考试计算机专业大概分数线是多少,单招分数线一般多少 单招分数怎样算...
  10. java ee 3.0_初识JavaEE 6 的 Servlet3.0