汇编作业一 使用循环计算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-100累加结果_第1张图片

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 实验结果截图

汇编作业一 使用循环计算1-100累加结果_第2张图片

1.4 实验感想

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

你可能感兴趣的:(汇编语言)