汇编语言实现数组加法运算(考虑进位)

一 代码实现

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中。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值