关于精简指令和复杂指令之争:精简指令集的种种好处和甚嚣尘上不用说了,但精简微操作只在顺序执行上有优势,但这些“微操作”需要分支循环来调度时,流水线重新清空和加载精简优势随之流失
CM3避开它:复杂指令集的51****有CJNE RN,REL我们的CM3也有CNE RN,OPERAND2甚至还多了CEQ RN,OPERAND2,而其它单片机一般只能CMP RN,寻址方式 JZ REL JNZ REL
CM3用单周期实现了复杂指令的风貌,而且做得更好!!!!至于多媒体指令矩阵运算等,复杂指令集才是它们的乐园!!!不得不提的是AVR单片机,此公在分支上做足了,不是精简指令流水线怕分支循环吗,我微分支====我跳步,片区里我跳一门牌号
CM3做起有困难,因为它的精简指令是准精简的存在16位和32位之分。后面要分析!
哈弗和冯-伊之争,严格说是哈弗结构和普林斯结构之争----二者都是冯先生程序思想
哈弗由于多了单独的数据线,指令和数据分开,数据指令可并行,是否优势很明显,而且编制病毒更困难,但我们却不去问这个问题?是谁让谁去吞吐数据的?吞吐数据原始门牌号谁给的-----源头还在指令上啊!!!
普氏的好处是大家在一个区域里混,区别在“派出所片警管辖的不同段”线垂直性管辖,要平移一个片容易吧,更重要是程序拆迁远程升级,来自远方的“程序数据”要重定位特别是自举就容易多了,要是放到哈弗数据线上,在把数据变成程序就麻烦多了!!
我们CM3不走寻常路:哈弗结构通过总线矩阵可以变成普氏,反之亦然,各取所需!!!甚至支持在数据线上运行程序,这对程序软硬仿真简直是量身打造。
关于精简指令的定长之争:要是一条NOP指令都要编程32位标准长是不是有点浪费粮食?你还别说CM3还真真有NOP.W字指令呢,破费了哈!!!其实对于默认的寄存器累加器间的操作是可以压缩操作数的,CM3一般有目的(一个或两个目的),第一源操作数,第二操作数,而且第二操作数
而第二操作数尤其变态,他可能自己还带三个操作数,ARM的变态在于,其数据总线本身就有一个ALU运算器可完成加减和移位累加运算的。鉴于有这么多的操作数操作单元,编码就长,而NOP连一个操作数也没有,又太浪费粮食,于是准定长产生了,那就是16位半字指令和32位标准指令混合无切换编码,尊重差异按需分配!!!
运算标志之争:试想一下51****做低位减法:我们一般要CLR C; SUBB A,源操作数,这里的C标志就是多余的,同样51**的ADD 和ADDC也是为了低位加法消除C多一份的编码,套用伟大的信息论大师"乡农"同志的话说:信息太多==无信息!!!AVR单片机是一个最开放的襟怀,任何一条指令都将标志挂出,让编程者自己决策-----在于看来其实这个恰恰是个败笔,因为编程特别是说“高级语言低级会话”者,恰恰大多是是业余水平的,当我们买的手机还需要看说明书以标志来操作的时候,这种手机只有去他妈的丢垃圾堆里了!!!!微芯公司的PIC首开了让用户自己选取标志和选择累加器(其累加器对外不开放)的先例,而且PIC把间接寻址---这个无需中间开放的倒腾空间---用到了极致!!!此为PIC还有半开放的PC,而51的PC是**!!!放开一说,高度透明号称广泛民主的国家是低效的(各种利益交割扯皮不断),高度**的国家,要不是上帝眷顾(如我们敬爱的阿拉石油伯伯)更低效,用种族恐怖主义话说---劣等!!!有所为有所不为,CM3后加S位让专业用户自己说了算,而对于有无标志无所谓的MOV类指令,MCU自己说了算,因为人家M脑比R(人脑)更专业!!!!向PIC致敬,向AVR的跳步分支致敬,向CM3致敬!!!
对于面向底层硬件型运用的单片机而言,与外部事件同步并作出快速的响应是其生命线,CM3走得最远,其中最当为之讴歌并大书特写的是其抢先和尾链,而且两者尖锐对立,抢先是软件难以实现而用优先编码的硬件很容易实现,而尾链是硬件难以实现,而软件容易实现的!!!
抢先是这样实现的,当编码器中当前有唯一一个优先编码时,CM3同志开始忙碌起来,该保护的保护,该挂起的挂起,该清空的清空,这时一个更优先的中断很不要脸却很合时机地来到了,此公的出现并优先编码冒头,把低位低压下去,既然系统谁冒头收谁的脑袋,于是就把高优先装进去!!!这个也只能用硬件用软件几乎不可能实现!!!!
请看下面的51指令,用软件实现尾链:当前高优先的INX0正执行,低优先的串口ESINT中断来到:
ORG 0003H
.
.
.
. ;以上是INX0中断子程序
JB ES,ESINT ;有串口中断尾联去
RETI
反过来低优先的串口ESINT正执行,高优先的INX0中断来到,此时“中断被中断”
ORG 0003H
.
.
.
. ;以上是INX0中断子程序
JNB ES,RTN ;有串口中断尾联去
DEC SP
DEC SP ;消除高优先中断的“中断累积”
SJMP ESINT ;再尾链串口中断程序
RTN:RETI
既然尾链用软件容易实现得多,用硬件却很难实现于是一个特别的标志或者识别符甚至是一段专有程序片出现了,它就是被CM3强制修改的非断点地址EX_RETUN=0XFFFFFFX,这个区域是用户指令去不到的,而CM3在这片区域里就干了上面51软件尾链哪些勾当!!!!!
至于独有的紧耦合的嵌套向量中断控制器和滴答时钟以及RAM FLASH “非哈弗”统一编址,并预先给各家芯片开发公司画下红线和粗线条,让大家在ARM这个“软核”平台上大家相互调和不起纷争也做出老大的样子!!!!最后再次向ARM 德州仪器,仙童,AVR,PIC, IBM INTEL 摩托骆拉等先驱们致敬!!!!
|