首页 > 其他分享 >DA指令通俗理解

DA指令通俗理解

时间:2023-12-21 19:45:23浏览次数:20  
标签:运算 DA ADD 指令 通俗 十进制 减数

DA指令通俗理解

最近在学微机的过程中,学到DA指令时对其底层实现感兴趣,但是搜集了网上的资料并没有讲的很清楚易懂的,遂有此文章,来分享一些我对这个指令的理解。

1.DA指令的作用

DA A这条指令书上叫做BCD加法调整指令,说人话就是因为单片机的加法指令是二进制的运算,如当01H+09H时如果我们想要将其当作十进制运算,其应该得到是10H,但是实际上给我们返回的是0AH,因此我们需要对其进行一些调整修正,也因此就有了DA指令,这条指令一般只用在我们想要单片机进行十进制运算的时候,在其他场景下使用没有啥意义,而且容易出错。

2.DA指令的底层运算原理/逻辑

2.1 DA指令使用条件

在讲解DA指令的底层运算逻辑之前,首先我先将其的使用条件总结一下放在下面

1.使用时必须紧跟在ADD/ADDC后面,没有其他的使用场景,DA指令就只是个十进制调整指令,注意这一点。

2.DA A,这是其的唯一用法,只能对累加器A使用,其他的都不行。

3.DA指令使用时,其前面的两个加数都必须是BCD码,即必须是0~9,不能是A~F,不然也不行。

4.减数没有调整指令,只有加数有,因此如果想要进行减数的十进制运算,需要通过加法来实现,后面会举例子。

5.注意,BCD码只是用二进制表示十进制的一种表示形式,与其值没有关系,如十进数67,其BCD码形式就为67H

2.2 DA指令底层修正逻辑

DA指令的修正逻辑其实挺好理解的,因为其只有0~9,没有A~F,因此我们需要在其显示出A~F时,让其转化掉,这也就有了下面的修正方法。

其修正有借助PSW标志位中的CY(进位标志)AC(辅助进位标志)的状态,这也就是为啥DA指令要紧跟在ADD/ADDC的后面的原因

1.若低4位大于9或(AC)=1,则低4位加6

2.若高4位大于9或(CY)=1,则高4位加6

3.若以上两条同时发生,或高4位虽等于9但低4位修正后有进位,则应加66H修正

上面就是其最基本也是全部的运算逻辑,下面几张图片是STC15官方文档里截出来的,有一些上面没有提到的但是可以稍微注意一下的点

image-20231221192359236

DA指令操作的伪代码可以看下面这张图

image-20231221192443004

2.3 关于CYAC的一些说明

CYAC在运算时若有相应的进位,则会置1,否则会清0,这又再次说明了为啥DA指令要在ADD/ADDC后面使用,因为其要结合CYAC来进行转换~~!

3.DA指令的使用举例

  • 十进制加法举例
ORG 0000H
MOV A, #56H
ADD A, #38H
DA  A
MOV 22H, A
SJMP $
END
  • 十进制减法举例

实现如下,假设够减:

​ (20H)- (21H) -> (22H)

ORG 0000H
CLR  C
MOV  A, #9AH    ;减数的补数为100-减数
SUBB A, 21H
ADD  A, 20H     ;被减数与减数的补数相加
DA   A
MOV  22H, A
SJMP $
END

标签:运算,DA,ADD,指令,通俗,十进制,减数
From: https://www.cnblogs.com/hnu-hua/p/17919955.html

相关文章

  • 12.21(update)
    续集细胞,不仅我们的体活因为整理考场顺便被停了(原因是因为他们明天放假,感情啥坏事都让我们沾上了呗),而且大黄也大概失败了大黄是谁?![o_231221100612_批注2023-12-21180539.png(781×241)(cnblogs.com)](https://images.cnblogs.com/cnblogs_com/blogs/807966/galleries/23579......
  • Day04运算符
    基本运算符//前四个,必须掌握!!!!!!!!!!!!!!!算木运算符:+,-,*,/,%,++,--赋值运算符=关系运算符:>,<,>=,<=,==,!=,instanceof运算符:&&,||,!//下面的,了解就行--------------------位运算符:&,|,^,~,>>、<<,>>>......
  • Day03-04英语名词
    Day03-04英语名词解释1.Commentanduncommentcode:对代码进行注释和取消注释。“Comment”:在代码中添加注释“uncomment”:删除注释。2.shortcut:快捷方式,简化的方法3.compatible:兼容的4.assign是一个英语单词,意思是“分配;指派;赋值”。5.primitive:“原始的;简单的;6.vulner......
  • updatetext关键字应用简介说明
    updatetext功能说明:updatetext的功能为:更新当前的text,ntext,image字段,当我们可以使用updatetext更新列中的部分数据updatetext语法简介: -----参数说明-------------------------BULK:是否采用二进制数据流,非采用二进制数据流,此参数无需输入table_name.dest_column_......
  • 《OneLLM: One Framework to Align All Modalities with Language》论文学习
    一、Abstract随着LLM的兴起,由于其强大的语言理解和推理能力,在学术和工业界中越来越受欢迎。LLM的进展也启发了研究人员将LLM作为多模态任务的接口,如视觉语言学习、音频和语音识别、视频理解等,因此多模态大语言模型(MultimodalLargeLanguageModel,MLLM)也引起了研究人员的关注......
  • Databend 开源社区上榜 2023 年度 OSCHINA 优秀开源技术团队
    2023年12月8日,OSCHINA对其平台上众多认证的官方技术团队和开源社区进行了全面评估,并颁发了“2023年度优秀开源技术团队”奖项,以表彰各团队在推动中国开源生态系统发展方面所展现的创新能力和显著贡献。在这一评选中,Databend开源社区有幸获得了2023年度优秀开源技术团......
  • Day04常量
    常量常量(Constant):初始化(initialize)后不能再改変的値!不会変动的値。所谓常量可以理解成一种特殊的変量,它的値被定后,在程序运行程中不允许被改変。//finalfinal常量名=値;finaldoublePI=3.14;System.out.println("==============================");public......
  • 华为防火墙1day?
    背景信息缺省情况下,FW通过8887端口提供内置的本地Portal认证页面,用户可以主动访问或HTTP重定向至认证页面(https://接口IP地址:8887)进行本地Portal认证。当企业部署了外部Portal服务器对用户进行认证时,需要配置自定义Portal认证。Portal认证通常也称为Web认证,一般将Portal认证网......
  • day 03-2 Python基础-字符串格式化
    2.字符串格式化字符串格式化,使用跟便捷的形式实现字符串的拼接。%format(推荐)f2.1%2.1.1基本格式化操作#%s是占位符,也成为字符串占位符#后面空格加%text="我叫%s,今年18岁"%"linzai"#:%前面加上一个空格print(text)name="linzai"text="我叫%s,今年18岁"......
  • 大模型微调方法总结:LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning
    随着深度学习技术的不断发展,大型预训练模型已成为许多任务的重要工具。然而,微调(finetuning)这些大模型以适应特定任务是一个复杂且计算密集型的过程。本文将重点介绍五种不同的微调方法:LoRA、Adapter、Prefix-tuning、P-tuning和Prompt-tuning,并对它们进行总结。LoRA(LearnedRepre......