求教一下十个字(十六位二进制数)之和的程序和两个多字节的二进制之和的区别
这两个程序差不多,可我感觉十个字的和不应该这样写啊。求讲解啊这是10个字(16位二进制数)之和的程序
ORG 100h
LEA SI,ADD1;
LEA DI,ADD2;
LEA BX,SUM;
MOV CL,CONT;
MOV CH,0;循环初始化
CLC; 进位清零
MADD1: MOV AX,[SI]; 读加数1
ADC AX,[DI]
ADD SI,2; 移动源区地址指针
ADD DI,2; 移动目的区地址指针
MOV [BX],AX; 回存计算结果
ADD BX,2; 移动―和‖存储区地址指针
LOOP MADD1; 循环控制
HLT;
暂停
ADD1 DB 0FEH,86H,7CH,44h,56H,1FH,24H,01H,02H,33H;加数1 ADD2 DB 56H,49H,4EH,0FH,9CH,22H,45H,11H,45H,21H; 加数2 SUM DB 10 DUP (0); 和存储单元 CONT
DB 5 ; 循环次数
这是两个数的加法程序
DATA SEGMENT
ADD1 DB FEH,86H,7CH,44H,56H,1FH
ADD2 DB 56H,49H,4EH,0FH,9CH,22H
SUM DB 6DUP(0)
CONT DB 3
DATA ENDS
STACK SEGMENT PARA STACK ′STACK′
DB 100DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME:CS:CODE,DS:DATA,ES:DATA,SS:STACK
MADDB: MOV AX,DATA
MOV DS,AX ;初始化数据段寄存器
MOV ES,AX ;初始化附加段寄存器
MOV SI,OFFSET ADD1 ;被加数地址→SI
MOV DI,OFFSET ADD2 ;加数地址→DI
MOV BX,OFFSET SUM ;和地址→BX
MOV CL,BYTE PTR CONT
MOV CH,0 ;初始化相加字长度
CLC ;清进位
MADDB1:MOV AX,[SI]
ADC AX,[DI] ;16位相加
INC SI
INC SI
INC DI
INC DI
MOV [BX],AX ;相加结果送结果单元
INC BX
INC BX
LOOP MADDB1 ;执行循环
HLT
CODE ENDS
END MADDB