两个十进制数:34561738与91379588的BCD码相加

2008-10-22     作者:        编辑:齐瑞瑞   点击进入论坛
关键词:BCD码  十进制数的BCD相加  DAA  AD

  题目要求:编制一个完整的程序,实现两个十进制数:34561738与91379588的BCD码相加。数据按低位存低地址,高位存高地址存放。

  解题分析:要用BCD码的加法求两个十进制数的和,首先要在数据段中定义好十进制数的BCD码。注意:BCD码的加法运算按字节进行,高位相加时要加上低位相加时产生的进位,而且要保证所加的进位是十进制调整指令所产生的。

  程序清单:

  DATA SEGMENT ;定义数据段

  FIRST DB 38H,17H,56H,34H ;34561738的BCD码

  SECOND DB 88H,95H,37H,91H ;91379588的BCD码

  SUM DB 5 DUP(?) ;多留一单元,存放最高位的进位

  DATA ENDS ; 数据段结束

  STAK SEGMENT STACK ;定义堆栈段

  DB 100 DUP(?) ;堆栈段大小

  TOP EQU $ ;定义栈底

  STAK ENDS ;堆栈段结束

  CODE SEGMENT ;定义代码段

  ASSUME CS:CODE,DS:DATA,SS:STAK

  START:MOV AX,DATA ;这是程序开始执行的第一条指令

  MOV DS,AX ;段寄存器赋值

  MOV AX,STAK

  MOV SS,AX ;段寄存器赋值

  LEA SP,TOP ;堆栈指针SP指向栈底,建立堆栈

  MOV CX,4 ;循环次数

  XOR SI,SI ;SI清0,同时清进位标志,使CF=0

  LOP1:MOV AL,FIRST[SI] ;从数组1取数到AL,寄存器相对寻址

  ADC AL,SECOND[SI] ;与数组2的对应的数带进位加

  DAA ;加法十进制调整

  MOV SUM[SI],AL ;存入结果,指令不影响进位位

  INC SI ;修改操作数地址,指令不影响进位位

  LOOP LOP1 ;循环

  ADC SUM[SI],0 ;和的最高位带进位加

  MOV AH,4CH

  INT 21H

  CODE ENDS ;代码段结束

  END START ;标号START处为程序执行起始地址

寻找产品:
姓       名: 电   话:
公       司: E-mail:
描       述: