分享

用程序如何计算1+2+ … +100的累加和

 丑的不明显 2010-10-28
用程序如何计算1+2+ … +100的累加和
此程序为计算1+2+ … +100的累加和,并以十进制格式显示输出计算结果。通过对本例的学习,我们应该知道如何在屏幕上显示输出一个无符号的十进制数据,并进一步熟悉汇编语言中循环程序及子程序的设计方法。
源程序:

DATA SEGMENT
   CTAB DW 10000,1000,100,10,1
   NUMB DW 5,4,3,2,1 ;相应需要除的次数
DATA ENDS

CODE SEGMENT
   ASSUME CS:CODE, DS:DATA
START:
   MOV AX,DATA
   MOV DS,AX
   MOV AX,0 ;累加器清0
   MOV CX,100 ;循环次数
LOP1:
   ADD AX,CX ;累加,和保存在AX中
   LOOP LOP1 

   ;LOOP LOP1 这条循环指令可更改为以下两条指令的组合: 
   ;DEC CX 
   ;JNZ LOP1

   CALL OUTD ;以十进制格式显示输出计算结果
   MOV AH,4CH
   INT 21H

;十进制格式显示输出子程序,入口参数在AX中(无符号数)
OUTD PROC
   AND AX,AX ;二进制数0?
   JNZ OUT1 ;不为0转移
   MOV DL,30H
   CALL DISP ;调用显示字符子程序,显示0后返回
   RET
OUT1:
   PUSH CX
   MOV SI,0
OUT2:
   CMP AX,CTAB[SI] ;分别与除数10000,1000…比较
   JAE NEXT ;高于等于转移
   ADD SI,2 ;指向下一个档次的除数
   JMP OUT2
NEXT:
   MOV CX,NUMB[SI] ;相应需要除的次数
OUT3:
   XOR DX,DX ;被除数扩展到32位
   DIV CTAB[SI] ;商在AX中,余数在DX中
   XCHG DX,AX ;余数送AX,作下一次的被除数
   ADD DL,30H
   CALL DISP ;调用显示字符子程序
   ADD SI,2 ;指向下一个档次的除数
   LOOP OUT3
   POP CX
   RET
OUTD ENDP

;显示字符子程序,入口参数在DL
DISP PROC
   PUSH AX
   MOV AH,02H
   INT 21H
   POP AX
   RET
DISP ENDP

CODE ENDS
   END START
用程序如何计算1+2+ … +100的累加和


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多