当前位置:文档之家› 基本逻辑运算

基本逻辑运算

好吧.我们直接一些一个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
对累加器求反,一个字节。

F590MOV P1,A 两个字节
所以一共是5个字节。

同样是求反操作,为什么对A求反,和对P1求反就完全不一样呢?
我们看一下其他操作,比如与And操作。

应该如何做呢,我们搜索一下and 找到logic里面有很多
看一下基本的逻辑运算,用and进行搜索
我们看一下具体的说明
这个也是来源字节,目标字节,ANL 就是把前面的和后面的相与,然后放到前面。

759053 MOV P1,#01010011B
这个东西,三字节,双周期。

53900F ANL P1,#00001111B
三字节双周期,
所以总共是六个字节,4个周期。

但是,如果我借助累加器A呢?操作由A来完成。

我们放到excel里面处理一下编码
7453540FF590
7453MOV A,053H
为什么是74呢?
这里面就是说明,也就是说,指令和hex文件里面的二进制数是一一对应的。

540F ANL A,#00001111B
F590 MOV P1,A
在end前面,每一条指令那个都是单周期双字节,如果我们把他用寄存器R0来做呢?总共是三个周期、六个字节
也就是说,我没有节省空间成本,但是节省了一个周期的时间成本。

不要小看这一个周期,他让计算机更快,让地球上的能源使用更节约。

为什么能够节省时间呢?P1是干IO这类事情的,对于加减乘除,与或非之类的不直接,算算术的事情就要交给运算专门的累加器A Accumulator,算完了之后再给io
这个时候其实可以弄个excel来比较空间byte和时间周期
如果是用R0存被与的那个数字呢?会提高效率么?
出来之后,七个字节,
找一下对应关系,
7453MOV A,#01010011B 双字节单周期780F MOV R0,#00001111B 双字节单周期
58 ANL A,R0 单字节单周期
F590 MOV P1,A 双字节,单周期
总共
4个周期,七个字节,大致的结论就是运算的时候,就用A和立即数,效率比较高,目前看来。

好我们来总结一下逻辑与这个都有什么东东
其实逻辑或,逻辑异或和逻辑与差不多,他们都属于逻辑操作
除此之外还有什么操作呢?
1.数学
2.逻辑
3.数据传输
4.位变量控制
5.程序分支
今天先到这里,明天nop闪亮起来。

相关主题