汇编语言使用宏,实现两个字节压缩BCD数相加

实验原理:

BCD码有两种形式,即压缩BCD码和非压缩BCD码。压缩BCD码用4位二进制数表示一位十进制数,一个字节表示两位十进制数,如:96D表示成 1001 0110B=96H。
算法思想:将2字节的BCD码分为2个单字节数相加,从低字节开始,进行2次循环操作,注意每次相加后必须进行BCD修正。

实验步骤:

1、使用记事本等编辑软件编写程序源代码,并保存为asm文件。
以下为程序源代码:

DATA SEGMENT
BCD1 DB 76H,54H
BCD2 DB 49H,37H
SUM DB 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATAMOV DS,AXLEA SI,BCD1LEA BX,BCD2LEA DI,SUMCLC
BCDADC MACRO P1,P2,P3MOV AL,P1ADC AL,P2DAAMOV P3,ALENDMBCDADC [SI],[BX],[DI]INC SIINC BXINC DIBCDADC [SI],[BX],[DI]MOV AH,4CHINT 21H
CODE ENDSEND START

2、使用DOSBOX软件搭建汇编环境,调用masm和link程序,将源代码编译链接成可执行程序(bcd.exe)。
3、运行bcd.exe,查看程序运行情况及结果检验
在DOS环境中运行debug bcd.exe,运用debug的u,g,d,r,t调用功能,即可查看检验程序运行状况。
首先调用反汇编指令u查看每条代码的代码段偏移地址

找到已初始化完成语句LEA SI,BCD1,该语句对应的偏移地址为0005,
再调用运行命令g,执行g5 ,并调用显示内存单元内容的命令D (d0)查看内存单元内容

蓝框中分别为被加数BCD1和加数BCD2的BCD码值5476和3749,橙框中为和SUM的存储单元,预设值分别为0000。
再次调用反汇编指令u查看后续代码的代码段偏移地址,找到主程序已运行完毕的语句MOV AH,4CH,该语句对应的偏移地址为0058

再调用运行命令g,执行g0046,并调用显示内存单元内容的命令D (d46)查看内存单元内容

和SUM中的值为9225,刚好为5476与3749相加的结果,运行结果正确。

汇编语言使用宏,实现两个字节压缩BCD数相加相关推荐

  1. C51单片机的压缩BCD码相加程序

    设被加数 NA 及加数 NB 均为三字节压缩BCD码,分别存放于内部 RAM 的 20H~22H 及 30H~32H 单元中,低位在前,高位在后. 要求计算两数之和,并将和存放到内部 RAM 中 3F ...

  2. 微型计算机原理实验报告总结,微机原理实验报告-两个多位十进制数相加的实验等.doc...

    微机原理实验报告-两个多位十进制数相加的实验等.doc 微机原理实验报告班级学号姓名实验一两个多位十进制数相加的实验一.实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立.汇编.链接.调试和运 ...

  3. 汇编实验1 两个多位十进制数相加的实验

    两个多位十进制数相加的实验 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处. ;定义宏实现回车 ...

  4. java两个很大的数相加_两个超大数的相加

    两个超大数的相加,主要是判断进一的情况,另外int型有边界限制,所以转换成字符串型进行处理. /** * @description 两个超大的数字相加 * @param $numA string 第一 ...

  5. 压缩BCD码拆成两个ACSII码存入指定单元【汇编语言】

    将片内RAM的20H单元中的压缩BCD码拆成两个ACSII码存入21H.22H单元.低4位存在21H单元,高4位存在22H单元. 思路: 压缩BCD码和非压缩BCD码的区别 一个BCD码占4位,而一个 ...

  6. c语言 ascii 和 压缩bcd 码之间的相互转换

    转载请标注出处:(版权所有) 本文将从五点详细介绍bcd码和ascii 之间的关系,如下所示: 一.简介 二.用途 三.特点 四.代码原理 五.代码 1.ascii 转压缩bcd码   2. 压缩bc ...

  7. 位、字节、字符数的关系

    位和字节的关系 1.位 bit 一个二进制数据0或1,是计算机传输的最小单元,8位是一个字节. 2.字节 byte 存储空间的计量单元,一个字节有8位,1024个字节代表1kb 3.英文和中文的不同 ...

  8. x86汇编_ASCII和非压缩BCD码运算_AAA / AAS_笔记56

    虽然 CPU 用二进制运算,但是也可以执行 ASCII 十进制串的运算.使用后者进行运算,对用户而言既便于输入也便于在控制台窗口显示,因为不用进行二进制转换.尽管 ASCII 运算执行速度比二进制运算 ...

  9. 【每日一算法】两数相加

    微信改版,加星标不迷路! 每日一算法-两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

最新文章

  1. 完美解决:python报错:‘utf-8‘ codec can‘t decode byte 0xa1 in position 56: invalid start byte
  2. CSS设置按钮式超链接
  3. CSDN粉丝可见回来了!
  4. 读书笔记《单核工作法》_6:颠倒you'xian'ji
  5. linux 免密安装
  6. emacs .emacs_谁在乎Emacs?
  7. 《中学生可以这样学Python》84节配套微课免费观看地址
  8. mysql 子查询 根据查询结果更新表
  9. caffe将图像数据转换成lmdb文件
  10. parentNode,parentElement,offsetParent
  11. php结合nginx,mysql
  12. Jquery CSS 操作 - height() 方法
  13. 按头安利 好看又实用的布纹 布料贴图素材看这里
  14. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月5日-12月11日)
  15. python转html_Python 将文本转换成html的简单示例
  16. (十)DSP28335基础教程——ECAP实验(超声波测距)
  17. java entries_Java ZipFile entries()用法及代码示例
  18. 关于显卡的一些参数说明,告诉你如何分辨哪个好一点,哪个烂一点。
  19. css常用样式(文字样式、边框样式、背景样式)
  20. 3DsMAX树木快速建模

热门文章

  1. 5.1 activiti执行监听器ExecutionListener
  2. 各版本cuDNN驱动下载地址 无需注册
  3. 人工智能里的数学修炼 | 隐马尔可夫模型:基于EM的鲍姆-韦尔奇算法求解模型参数
  4. 测试中文编码_如何通过带回家的编码测试
  5. 用计算机可以干嘛的,计算机还可以做什么?
  6. 互联网产品经理的职责范围、能力要求
  7. C++满足条件的数累加
  8. 两个向量夹角的cos值
  9. 欢迎使用CSDN-markdown编辑器范德萨发盛大发售发放时防守是大
  10. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十九)