博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中颖4位MCU的减法汇编指令
阅读量:5221 次
发布时间:2019-06-14

本文共 1123 字,大约阅读时间需要 3 分钟。

1, SUB  M

执行动作: M - A -> A, 如果M-A的过程中没有产生借位,则CY= 1,如果产生了借位,则CY= 0.

其中,A为累加器。

 

2, SBI  M,  I

执行动作:M - I -> A, 如果M - I的过程中没有产生借位,则CY= 1,如果产生了借位,则CY= 0.

 

3, SBC  M

执行动作:M - A - (!CY) -> A, 如果M - A - (!CY)的过程中没有产生借位,则CY = 1, 如果产生了借位,则CY = 0.

 

SBC比较奇特,举几个例子:

1)

CY = 0的前提下,

LDI   70H,   08H

LDI   71H,    07H
SBC   70H

结果为A = 0,CY= 1

 

2)

CY = 1的前提下,

LDI   70H,   08H

LDI   71H,    07H
SBC   70H

结果为A = 1,CY= 1

 

3)

CY = 0的前提下,

LDI   70H,   06H

LDI   71H,    07H
SBC   70H

结果为A = E,CY= 0

 

4)

CY = 1的前提下,

LDI   70H,   06H

LDI   71H,    07H
SBC   70H

结果为A = F,CY= 0

 

5)

CY = 0的前提下,

LDI   70H,   07H

LDI   71H,    07H
SBC   70H

结果为A = F,CY= 0

 

6)

CY = 1的前提下,

LDI   70H,   07H

LDI   71H,    07H
SBC   70H

结果为A = 0,CY= 1

 

SBC的行为为什么要设计为这样,暂时没有明白,如有知道的朋友,请赐教。

 

现在终于明白SBC的行为为啥要设计得这么奇特。这条指令在计算带借位的减法时,大有用处。

例如,程序里有个CNT[CNT0, CNT1]要减至0,用如下的代码即能轻松实现。

1 LOOP:2         SBI        CNT0,        01H      ;CNT的低4位减13         LDI        TBR,         00H       ;累加器A清04         SBC        CNT1                    ;如果上一步的减法有借位,则CNT的高4位会减1;如果没有借位,则高4位不变5         BNZ        LOOP                    ;如果CNT不为0,则继续

 

转载于:https://www.cnblogs.com/outs/p/5004859.html

你可能感兴趣的文章
Hive教程(1)
查看>>
黑马程序员-指针的初步认识
查看>>
提示未授予用户在此计算机上的请求登录类型
查看>>
PHP二维数组排序
查看>>
转:一堂如何提高代码质量的培训课
查看>>
一个奇葩常见的问题 nginx 403 forbidden错误
查看>>
[HDU4417]Super Mario(主席树+离散化)
查看>>
转 大话权限设计
查看>>
如何 Mock 非虚方法和密封类?
查看>>
判断应用程序是控制台程序还是窗体程序
查看>>
hdu 相遇周期
查看>>
Hive分区表增加字段新增字段值为空的bug
查看>>
rman catalog配置简要笔记
查看>>
Test SRM Level One: TemperatureScales
查看>>
ListView
查看>>
Vue自动化工具(Vue-CLI)
查看>>
十、IntelliJ IDEA 中 Project 和 Module 的概念及区别
查看>>
用户用户组管理:用户管理命令useradd
查看>>
站立会议个人博客2(2016/4/20)
查看>>
调用电话短信
查看>>