一 代码实现
DATAS segment
org 2000h
num1 db 12h,95h,0f1h,0c2h,82h,2h,10h,34h
count equ $-num1
org 3000h
num2 db 23h,0dfh,023h,3fh,3ch,0b3h,57h,3h
org 5000h
res db count dup(0)
DATAS ends
STACK SEGMENT PARA STACK 'STACK' ;定义堆栈段
DB 1024 DUP (0) ;在存储器的某个区域建立一个堆栈区
STACK ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACK
START:
MOV AX,DATAS;将data段的基址传给AX
MOV DS,AX;将data段的基址传给DS
MOV CX,count;把count的基址传给CX
MOV SI,count-1;把count-1的基址传给SI
MOV DH,0;DH清零
C_LOOP: LEA BX, num1;取num1的偏移地址给BX
MOV AL,[BX+SI];把地址[BX+SI]传给AL
LEA BX, num2;取num2的偏移地址给BX
MOV DL,[BX+SI];把地址[BX+SI]传给DL
ADC DL,AL ;考虑进位的加法运算
LEA BX,res ;取res的偏移地址给BX
MOV [BX+SI],DL;修改存储相加的结果的存储器的地址为[BX+SI]
DEC SI ;SI自减
LOOP C_LOOP;循环C_LOOP,直到SI=0即相加完
MOV AH,4CH;返回DOS
INT 21H
CODES ENDS
END START
原数组调试结果
修改数组为num1 db 11H,95h,0f1h,0c2h,82h,2h,10h,34h
调试结果
与原数组相比,第一个元素为35H,小1,与修改后的理论值一致。
由调试结果可以看出,改程序的功能是把两个数组num1和num2的元素,从末尾开始考虑进位相加起来,结果存在res中。