欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-23 22:49:34
...

汇编作业一


题目:按下面的程序框架编程,使用循环语句计算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.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累加结果

1.4 实验感想

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