zoukankan      html  css  js  c++  java
  • 中颖4位MCU的减法汇编指令

    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位减1
    3         LDI        TBR,         00H       ;累加器A清0
    4         SBC        CNT1                    ;如果上一步的减法有借位,则CNT的高4位会减1;如果没有借位,则高4位不变
    5         BNZ        LOOP                    ;如果CNT不为0,则继续
  • 相关阅读:
    使用 lntelliJ IDEA 创建 Maven 工程的springboot项目
    HTTP协议小记
    TCP/UDP的网络底层实现
    TCP的三次握手和四次挥手
    IP地址和MAC地址绑定的必要性
    什么是回调函数?
    基于TCP实现的Socket通讯详解
    HTTP协议随笔
    计算机虚拟世界的入门常识(1)——信号的原理
    UDP比TCP好用的优势
  • 原文地址:https://www.cnblogs.com/outs/p/5004859.html
Copyright © 2011-2022 走看看