汇编语言多字节BCD码加法减法

发布者:翅膀小鹰最新更新时间:2013-01-07 来源: 51hei关键字:汇编语言  多字节  BCD码  加法减法 手机看文章 扫描二维码
随时随地手机看文章

(1) 标号: BCDA 功能:多字节BCD码加法

给大家介绍一个单片机汇编语言写的多字节BCD码加法减法子程序
入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。
出口信息:和在[R0]中,最高位进位在CY中。
影响资源:PSW、A、R2 堆栈需求: 2字节
BCDA: MOV A,R7 ;取字节数至R2中
MOV R2,A
ADD A,R0 ;初始化数据指针
MOV R0,A
MOV A,R2
ADD A,R1
MOV R1,A
CLR C
BCD1: DEC R0 ;调整数据指针
DEC R1
MOV A,@R0
ADDC A,@R1 ;按字节相加
DA A ;十进制调整
MOV @R0,A ;和存回[R0]中
DJNZ R2,BCD1 ;处理完所有字节
RET

汇编语言多字节BCD码加法减法

(2) 标号: BCDB 功能:多字节BCD码减法
入口条件:字节数在R7中,被减数在[R0]中,减数在[R1]中。
出口信息:差在[R0]中,最高位借位在CY中。
影响资源:PSW、A、R2、R3 堆栈需求: 6字节
BCDB: LCALL NEG1 ;减数[R1]十进制取补
LCALL BCDA ;按多字节BCD码加法处理
CPL C ;将补码加法的进位标志转换成借位标志
MOV F0,C ;保护借位标志
LCALL NEG1 ;恢复减数[R1]的原始值
MOV C,F0 ;恢复借位标志
RET
NEG1: MOV A,R0 ;[R1]十进制取补子程序入口
XCH A,R1 ;交换指针
XCH A,R0
LCALL NEG ;通过[R0]实现[R1]取补
MOV A,R0
XCH A,R1 ;换回指针
XCH A,R0
RET
 
(3) 标号: NEG 功能:多字节BCD码取补

汇编语言多字节BCD码加法减法

入口条件:字节数在R7中,操作数在[R0]中。
出口信息:结果仍在[R0]中。
影响资源:PSW、A、R2、R3 堆栈需求: 2字节
NEG: MOV A,R7 ;取(字节数减一)至R2中
DEC A
MOV R2,A
MOV A,R0 ;保护指针
MOV R3,A
NEG0: CLR C
MOV A,#99H
SUBB A,@R0 ;按字节十进制取补
MOV @R0,A ;存回[R0]中
INC R0 ;调整数据指针
DJNZ R2,NEG0 ;处理完(R2)字节
MOV A,#9AH ;最低字节单独取补
SUBB A,@R0
MOV @R0,A
MOV A,R3 ;恢复指针
MOV R0,A
RET

关键字:汇编语言  多字节  BCD码  加法减法 引用地址:汇编语言多字节BCD码加法减法

上一篇:rs232和rs422接口电路及区别
下一篇:1-wire总线汇编程序

推荐阅读最新更新时间:2024-03-16 13:15

2440裸机编程之一 C语言调用汇编语言编程
一、内嵌汇编的方式,使用关键字__asm{汇编指令……},这种方式操作简单,但是限制很多,比如:不能写PC、不支持标号表达式等等,许多正常的汇编指令和伪指令都不用。 下面是个例子: //****************************************** int x = 3; int y = 5; int z; int main(void) { __asm { MOV R0,x MOV R1,y ADD R0,R0,R1 MOV z,R0 } while(1); } //****************************************** 结果即z=x+y 如图 二、调用外部汇
[单片机]
2440裸机编程之一 C语言调用<font color='red'>汇编语言</font>编程
智能仪表多字节二进制数转换BCD
    摘要: 多字节无符号二进制数转BCD码在以单片机为核心的智能仪表中应用很普遍。本文介绍一种新的转换方法,并给出三字节二进制数转BCD码的源程序,该程序执行时间仅为原来的1.3%,效率提高显著。     关键词: 多字节二进制整数  BCD码  转换 一、引言 在以MCS-51单片机为核心的智能仪表系统中,常遇到二进制整数转换为BCD码的情况。国内许多单片机书籍都对此进行了介绍并给出了子程序,但效率不高。本文参考文献作者剖析了二进制整数转BCD码的子程序,分析了程序效率低的原因,给出了改进后的源程序,效率有所提高。以3字节的二进制整数为例,程序执行时间由2.856ms减小到2.410ms。还有没有其它的
[测试测量]
BCD到ASCII转换实例
BCD码到ASCII码转换实例 BCDTOASC MOV R0,#20H MOV R1,#10H MOV R2,#05H ACALL BCDASC LOOP0: SJMP LOOP0 BCDASC: MOV R1,#10H MOV R6,#0AH LOOP1: MOV @R1,#00H INC R1 DJNZ R6,LOOP1 LOOP2: MOV A, @R0 MOV R2,A SWAP A ANL A, # 0FH ADD A,#30H- MOV @R1,A INC R1 M
[单片机]
如何在KEIL中实现C语言嵌套汇编语言
一、讲解背景 在单片机学习的过程中,掌握一点汇编语言是非常有必有的,作为低级语言汇编语言在单片机开发中有它不可取代的作用,比如每条指令可以精确的确定延时时间,便于理解非常适合硬件工程师学习。但是要提高单片机技能,必须掌握C 语言编程,因为C 语言有强大的模块化管理思想。我想在很多人学习的过程中即学了汇编语言,又学习了C 语言,那么一个问题便随之而产生,如果将C 语言与汇编语言相互结合,达到更好的编程效果,本次讲解就是基于这个问题而生成的。 二、操作步骤 第一步: 在KEIL 中新建工程及文件并复制以下程序并保存为C 文件: /* 功能:C 语言里嵌套汇编语言,起到抛砖引玉的作用 */ #in
[单片机]
如何在KEIL中实现C语言嵌套<font color='red'>汇编语言</font>
ARM汇编语言 - 简介 [三]
上文介绍了ARM的数据处理指令,本文将主要介绍ARM中的跳转指令。 【跳转指令】 无条件跳转 ARM中的基础跳转指令就一个字母 B ,代表Branch,相比起x86中和它功能基本相同的 jmp 指令,意思显得稍微隐晦了点。 B 属于无条件跳转,就是不管三七二十一,跳就对了,如果跳转的目标地址不是由立即数直接给出,而是通过寄存器给出,那就应该使用 BX 。 B label ;jump to the address given by the label BX reg ;jump to the address given by the register 目标地址是否由寄存器给出只是表象,真正的区
[单片机]
ARM<font color='red'>汇编语言</font> - 简介 [三]
STM8与汇编语言(5)
上一次的实验程序,完成了LED指示灯的驱动,用到了GPIO的输出方式,这一次要用GPIO的输入方式,进行按键的输入。下面的代码是读入按键值,如果按键按下,则点亮LED,否则熄灭LED。 利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到当按下按键时,LED1点亮,当抬起按键时,LED1熄灭。 stm8/ #include mapping.inc ; 涉及到的硬件资源 ; LED1定义在PD3 ; KEY1定义在PD7 ; 下面定义端口D的寄存器地址 PD_ODR EQU $500f PD_IDR E
[单片机]
单片机汇编语言编程:对 A 中内容开平方
把二进制数转换成 BCD 码,是很常见的,做而论道以前也发表过这样的程序。 但是,过去都是用寄存器,如果要求用片内RAM单元,就少见了。 当然,也可以把片内RAM单元的数据,先传送到寄存器,再利用以前写的程序进行转换。转换完毕后,再把结果传送到片内RAM单元。 如果直接用片内RAM单元来进行转换呢? 这也是可以的,只是速度会慢一些。 以前,从来没有见过有谁编写出来直接使用片内RAM转换的程序。 没有人编写,大概就是速度的原因吧。 做而论道现在就编写一个,大家看看,和使用寄存器相比,速度有多少降低。 下面就是这样的题目。 =============================== 编写一段程序,将
[单片机]
MCS-51汇编语言的程序格式
MCS-51汇编语言程序的一般格式 * 与8086不同,没有代码段、数据段等区分,统一编址。 * 程序由指令行或注释行组成,指令行每行只能写一条指令。 * 指令前可用“标号:”表示指令地址,以便在指令中引用;标号是符号名,以字母开头。 * 注释行应以“;”号开头;指令后也可用“;”号分隔,附加注释。 * 程序由伪指令ORG XXXXH 定位,ORG中的16位地址就是将来写入程序存储器的绝对地址。程序中的ORG应按地址从小到大排列。由ORG定位的程序段可以不连续,汇编程序将会在段间的空地址上填00H,即NOP。因此,每个ORG段的最后一条指令一般应是转移指令。 * 数据由伪指令DB(字节)或DW(双字节)说明。数值应以数码0-9开头
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved