两个十进制数:34561738与91379588的BCD码相加
题目要求:编制一个完整的程序,实现两个十进制数: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: | ||
| 描 述: | |||







