汇编作业一 使用循环计算1-100累加结果

汇编作业一

题目:按下面的程序框架编程,使用循环语句计算1+2+3+…+100,并把结果保存在物理地址12345H指向的字存储单元中。

CODES SEGMENT
    ASSUME CS:CODES
START:
	 ;此处输入功能实现代码
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

一、方法一
1.1 实验算法

  先将物理地址设为12345h,再通过ax做中间变量循环100次累加到bx暂时存储,每循环依次就将ax的值自增1,直至100,循环结束后将bx的值存储到物理地址12345h。

1.2 实验代码
assume cs:code
code segment
  start:mov ax,1234h
        mov ds,ax
        mov bx,0005h   ;设置地址ds:[bx]=1234:5
     
        mov ax,0
        mov dx,1
        mov cx,100     ;设置循环100次
      s:add ax,dx
        inc dx
        loop s
     
        mov ds:[bx],ax
     
        mov ah,4ch
        int 21h
code ends
end start
1.3 实验结果截图

在这里插入图片描述

1.4 实验感想

  此方法为最简单直接的方法,不管累加至多少,只需要改变loop循环次数即可,但是计算速度将在一定程度上受限。


二、方法二
1.1 实验算法

  利用数据1-100为公差是1的等差数列,通过公式(其中是等差数列和,)可求得结果。

1.2 实验代码
assume cs:code
code segment 
   start:mov ax,1234h
         mov ds,ax
         mov bx,0005h  ;设置地址ds:[bx]=1234:5
     
         mov ax,0001h
         mov cx,64h    ;将100赋给cl

         add ax,cx     ;等差数列首项加末项,即1+100
         imul cx       ;(1+100)*100
     
         mov cx,2
         mov ds:[bx],cx         ;将cx的值赋给ds:[bx]
         div word ptr ds:[bx] ;将ax/2,结果赋给ax,即ax=((1+100)*100)/2

        mov ds:[bx],ax
     
        mov ah,4ch
        int 21h
code ends
end start
1.3 实验结果截图

Alt

1.4 实验感想

  此方法相比方法一优化了计算方式,将题目简化为求等差数列之和,通过等差数列求和公式直接计算即可,速度相比之下提高了很多,不足在于乘除法运算需要注意格式与要求。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值