汇编作业一 使用循环计算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.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.4 实验感想
此方法相比方法一优化了计算方式,将题目简化为求等差数列之和,通过等差数列求和公式直接计算即可,速度相比之下提高了很多,不足在于乘除法运算需要注意格式与要求。