基本逻辑运算
好吧. 我们直接一些一个mov 看一下效果, 我想直接写二进制数, 怎么办呢, 直接搜索P1, 会不会有什么东西呢?
,
好明白了, 写一个看看。
看起来太费劲了,求反应该如何做呢?搜logic 好像,and 、or 、xor 都有,求反在哪里,一个一个的找,搜logic 找,是最基本的逻辑操作,再找找。。。 好像在这里
于是,
好像是只能对于Accumulator 进行这个操作,什么是Accumulator? 在pdf 中搜索
那我能不能先把这个东西mov 到A 里面,然后对于A 求反,再把A 里面的东西mov 回到P1?
成功,
如果直接对于P1内容与11111111进行异或呢?与1按位异或其结果就是求反。
可以么?
效果是可以的但是用了6
个字节 这个明显反而把程序变大了。。
。为什么刚才4句话,5个字节;现在3句话反而6个字节呢? 那我们分别来看一下
MOV P1,#01011100B 对应着5790 5C , 7590对应着什么?
57知道了,而且它对应着3个字节,是一条三个字节的指令,于是会比较大么? 我们可以看到每一条指令都有相应的周期和大小,有的24个周期,有的12个周期,这恐怕就是优化程序的方法。 6390FF XRL P1,#11111111B 这个63恐怕就是,
这也是3个字节的,所以一共就是六个字节???
90
显然对应的就是P1,为什么呢?如何对应的呢?
那我们来看一下刚才那个5
个字节的
蓝色的是这次的,我们来分析一下,745C MOV A,
#01011100B
2个字节
F4 CPL A
对累加器求反,一个字节。 F590 MOV P1,A 两个字节
所以一共是5个字节。
同样是求反操作,为什么对A 求反,和对P1求反就完全不一样呢?
我们看一下其他操作,比如与And 操作。
应该如何做呢,我们搜索一下and 找到logic 里面有很多
看一下基本的逻辑运算,用
and 进行搜索
我们看一下具体的说明
这个也是来源字节,目标字节,ANL
就是把前面的和后面的相与,然后放到前面。
759053 MOV P1,#01010011B
这个东西,三字节,双周期。 53900F ANL P1,#00001111B
三字节双周期,
所以总共是六个字节,
4个周期。
但是,如果我借助累加器A
呢?操作由A 来完成。
我们放到excel 里面处理一下编码
7453540FF590
7453 MOV A,053H 为什么是74呢?
这里面就是说明,也就是说,指令和hex 文件里面的二进制数是一一对应的。
540F ANL A,#00001111B
F590
MOV P1,
A
在end 前面,每一条指令那个都是单周期双字节,如果我们把他用寄存器R0来做呢?总共是三个周期、六个字节
也就是说,我没有节省空间成本,但是节省了一个周期的时间成本。。。不要小看这一个周期,他让计算机更快,让地球上的能源使用更节约。。。为什么能够节省时间呢?P1是干IO 这类事情的,对于加减乘除,与或非之类的不直接,算算术的事情就要交给运算专门的累加器A Accumulator ,算完了之后再给io 这个时候其实可以弄个excel 来比较空间byte 和时间周期 如果是用R0存被与的那个数字呢?会提高效率么?
出来之后,七个字节,
找一下对应关系,
7453
780F MOV A,#01010011B MOV R0,#00001111B 双字节单周期 双字节单周期
58 ANL A,R0 单字节单周期
F5
90 MOV P1,A
双字节,单周期
总共
4个周期,七个字节,大致的结论就是运算的
时候,就用A 和立即数,效率比较高,目前看来。 好我们来总结一下逻辑与这个都有什么东东
其实逻辑或,逻辑异或和逻辑与差不多,他们都属于逻辑操作
除此之外还有什么操作呢?
1. 数学
2. 逻辑
3. 数据传输
4. 位变量控制
5. 程序分支
今天先到这里,明天nop 闪亮起来。。。