汇编指令学习方法
MCS-51单片机共有111条指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。这里先介绍指令助记符及其相关符号的记忆方法。
一、助记符号的记忆方法
1.表格列举法
把44个指令助记符按功能分为五类,每类列表记忆。
2.英文还原法
单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。
3.功能模块记忆法
单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。这样,化整为零,各个击破,实现快速记忆。
表1 指令按功能分类表

二、指令的记忆方法
1.指令操作数的有关符号
MCS-51单片机的寻址方式共有七种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、基址变址寻址、相对寻址、位寻址,必须掌握其表示方法。
(1)立即数与直接地址。
#data表示八位立即数,#data16表示是十六位立即数,direct表示直接地址。
(2)Rn(n=0~7)、A、B、CY、DPTR寄存器寻址变量。
(3)@R0、@R1、@DPTR、SP表示寄存器间接寻址变量。
(4)A+DPTR、A+PC表示基址变址寻址的变量。
(5)PC+rel(相对量)表示相对寻址变量。
记住指令的助记符,掌握不同寻址方式的指令操作数的表示方法,为记忆汇编指令打下了基础。MCS-51指令虽多,但按功能可分为五类,其中数据传送类29条,算术运算类24条,逻辑操作类24条,控制转移类17条,布尔位操作类17条。在每类指令里,根据其功能,抓住其源、目的操作数的不同组合,再辅之以下方法,是完全能记住的。
我们约定,可能的目的操作数按(#data/direct/A/Rn/@Ri)顺序表示。
对于MOV指令,其目的操作数按A、Rn、direct、@Ri的顺序书写,则可以记住MOV的15条指令。例如以累加器A为目的操作数,可写出如下4条指令。
MOV A,#data/direct/Rn/@Ri
以此类推,写出其他指令。
MOV Rn,#data/direct/A
MOV direct,#data/direct/A/Rn/@Ri
MOV @Ri,#data/direct/A
2.指令图示记忆法
图示记忆法是把操作功能相同或相似、但其操作数不同的指令,用图形和箭头将目的、源操作数的关系表示出来的一种记忆方法。
3.相似功能归类法
在MCS-51指令中,部分指令其操作码不同,但功能相似,而操作数则完全一样。相似功能归类法就是把具有这样特点的指令放在一起记忆,只要记住其中的一条,其余的也就记住了。如加、减法的十二条指令,与、或、非的十八条指令,现列举如下。
ADD/ADDC/SUBB A,#data/direct/Rn/@Ri
ANL/ORL/XRL A,#data/direct/Rn/@Ri
ANL/ORL/XRL direct,#data/A
上述每一排指令,功能相似,其操作数都相同。其他的如加1(INC)、减1(DEC)指令也可照此办理。
4.口诀记忆法
对于有些指令,可以把相关的功能用精练的语言编成一句话来记忆。如PUSH direct和POP direct这两条指令。初学者常常分不清堆栈SP的变化情况,为此编成这样一句话:
(SP的内容)加1(direct的内容)再入栈,(SP的内容)弹出(到direct单元)SP才减1。
又如乘法指令中积的存放,除法指令中被除数和除数以及商的存放,都可以编成口诀记忆如下:
MUL AB ;高位积(存于)B,低位积(存于)A
DIV AB ;A除以B,商(存于)A余(下)B
5.汇编与C51对比法
用可读性较强的C51程序写出汇编指令的实现方法,通过C51语言理解汇编指令。
有了好的方法还不够,还需要实践。即多读书上的例题和别人编写的程序,自己再结合实际编写一些程序。只有这样,才能更好更快地掌握单片机指令系统。
不要尝试去背指令,理解、实践、会使用才是最主要的!
成为一个优秀程序员的五个步骤:读-->抄-->改-->写-->不写,写程序的最高境界,是为了以后不写程序。
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
复杂指令集与精简指令集
一、复杂指令集计算机(CISC) Complex Instruction Set Computer
长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得。随着集成电路技术,特别是VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式,甚至某些指令可支持高级语言语句归类后的复杂操作。至使硬件越来越复杂,造价也相应提高。为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外,还通过存于只读存贮器(ROM)中的微程序来实现其极强的功能,微处理在分析每一条指令之后执行一系列初级指令运算来完成所需的功能,这种设计的型式被称为复杂指令集计算机结构。一般CISC计算机所含的指令数目至少300条以上,有的甚至超过500条。
二、精简指令集计算机(RISC) Reduced Instruction Set Computer
采用复杂指令系统的计算机有着较强的处理高级语言的能力,这对提高计算机的性能是有益的。当计算机的设计沿着这条道路发展时,有些人没有随波逐流,他们回过头去看一看过去走过的道路,开始怀疑这种传统的做法:IBM公司没在纽约Yorktown的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题。因为当时已感到,日趋庞杂的指令系统不但不易实现,而且还可能降低系统性能。1979年以帕特逊教授为首的一批科学家也开始在美国加册大学伯克莱分校开展这一研究。结果表明,CISC存在许多缺点。首先,在这种计算机中,各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的80%指令,只占一个处理器指令系统的20%。事实上最频繁使用的指令是取、存和加这些最简单的指令。这样-来,长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器。同时,复杂的指令系统必然带来结构的复杂性,这不但增加了设计的时间与成本,还容易造成设计失误。此外,尽管VLSI技术现在已达到很高的水平,但也很难把CISC的全部硬件做在一个芯片上,这也妨碍单片计算机的发展。在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差。由于采用二级的微码执行方式,它也降低那些被频繁调用的简单指令系统的运行速度。因而,针对CISC的这些弊病,帕特逊等人提出了精简指令的设想,即指令系统应当只包含那些使用频率很高的少量指令,并提供一些必要的指令以支持操作系统和高级语言。按照这个原则发展而成的计算机被称为精简指令集计算机结构,简称RISC。

图1 两种指令集的对比
三、CISC与RISC的区别
从硬件角度来看,CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,所以它的制造工艺简单且成本低廉。
从软件角度来看,CISC运行的则是我们所熟识的DOS、Windows操作系统。而且它拥有大量的应用程序。因为全世界有65%以上的软件厂商都理为基于CISC体系结构的PC及其兼容机服务的,象赫赫有名的Microsoft就是其中的一家。而RISC在此方面却显得有些势单力薄。虽然在RISC上也可运行DOS、Windows,但是需要一个翻译过程,所以运行速度要慢许多。
四、代表性单片机
CISC:所有8051内核单片机
RISC:STM32单片机(基于ARM内核都是RISC)、AVR单片机、PIC单片机、MSP430单片机
反汇编(Disassembly)是把目标代码转为汇编代码的过程,即把机器语言转换为汇编语言代码,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助。
图1是一款51单片机反汇编器,它将第Keil uVision工程生成的MyProject.hex文件反汇编成汇编语言。如果想验证反汇编是否正确,可以将反汇编生成的程序代码再编译生成机器码,将新的机器码下载至单片机,观察实验现象是否跟原来一致。

图1 单片机反汇编器
有一些烧录软件,可以读出编程写入单片机中的机器码文件,为了防止他人通过反汇编破解自己的单片机系统,使用者要选择加密功能强的单片机,在烧录机器码文件时,选择较好的加密方式。
★温馨提示:本部分内容选自《单片机学习与实践教程》,朱向庆编著,北京邮电大学出版社,2018年出版,引用请注明出处。
本内容来源:https://mp.weixin.qq.com/s/-taXEj5aei5OVnjAwd1wyg

她是英国早期计算机先驱中的最后一位,曾在伦敦大学伯贝克学院编写了第一个汇编语言,并为第一个计算机系统设计了汇编器和自动代码。后来,凯瑟琳转向研究自然语言处理以及神经网络。
凯瑟琳被称为汇编语言之母,具体来说就是她创造了第一个“汇编语言”。
最初的程序是用机器代码(二进制:1/0)进行编写,在早期计算机上存在一个很大的麻烦:重新编程涉及到大量的重新布线和更换开关,很费力。
为了便于理解,凯瑟琳将上述的指令转换为人类可读的符号,发明了契约记号法,使得整个过程变得更加容易,这便被称为是汇编语言。
值得一提的是,凯瑟琳的大多数工作都是与其丈夫一同完成的。

1944年她获得伦敦大学数学学士学位,毕业后成为法恩伯勒研究机构皇家飞机研究所的一名初级科学官员。
两年后,她转到了伦敦大学伯贝克学院,在这里,凯瑟琳遇到了她后来的丈夫:安德鲁·唐纳德·布斯(Andrew Donald Booth),加入了他的研究团队。
他们研究的主要内容是计算X射线晶体学图像,为此,他们着手制造一种被称为自动继电器计算器(ARC)的计算机,来帮助他们计算所涉及的数字。
在这其中,他们分工明确,安德鲁主要负责硬件的设计,制造电脑,而凯瑟琳主要负责编程,也就是上述提及到的汇编语言,同时还建造和维护ARC的部件。
1947年,凯瑟琳与安德鲁一同前往普林斯顿大学咨询了冯·诺依曼,冯·诺依曼向他们解释了他的计算机体系结构。
回到英国后,他们先后生产了三台机器: ARC ,SEC(简易电子计算机)和 APE(X)C(通用电子计算机)。
并且,APE(X)C设计当时被商业化,被英国制表机有限公司作为HEC系列产品进行出售,可以算作是ICT1200计算机的前身。

与此同时,凯瑟琳会定期发布有关ARC及 APE(X)C的论文,还撰写了《自动数字计算器》一书,展示了其“规划与编码”编程风格所涉及的一般原则。
期间,凯瑟琳还获得了应用数学的博士学位(1950年),同年与安德鲁成婚。
1957年,他们俩一同创立了伯贝克学院的计算机科学及信息系统系,1958年,凯瑟琳在系里开始教授编程课。
20世纪60年代初,凯瑟琳一家搬到了加拿大,凯瑟琳和安德鲁继续在学术界工作。
当时凯瑟琳已经开始研究自然语言处理和神经网络,在动物特征识别方向做出了很大的贡献。
她最近的一篇论文是在1993年71岁时与儿子共同共同合写,主题为:利用神经网络来识别海洋哺乳动物。
