用汇编语言编程求1+2+3+...+10000=?

如题所述

        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:  JMP       BBB
           X  DD        0
        BBB:
              PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              MOV       CX,10000
              MOV       WORD PTR [X],0
              MOV       WORD PTR [X+2],0
      @MAIN:
              ADD       WORD PTR [X],CX
              ADC       WORD PTR [X+2],0
              LOOP      @MAIN
        
              MOV       AX,WORD PTR [X]
              MOV       DX,WORD PTR [X+2]
              CALL      DISPDXAX
              MOV       AH,4CH
              INT       21H
;========================================              
 ; 将要显示的32位无符号数置于dx、ax中 
    DISPDXAX  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              PUSH      DI
              PUSH      BP
              PUSHF
              MOV       WORD PTR [Y],AX
              MOV       WORD PTR [Y+2],DX
       ; 以下将 Y (16进制)转为10进制串并输出
              MOV       AX,WORD PTR [Y]
              MOV       DX,WORD PTR [Y+2]
              MOV       BX,WORD PTR [Z]
              MOV       CX,WORD PTR [Z+2]
              MOV       WORD PTR N,0
        MM0:  INC       WORD PTR N
              SUB       AX,BX
              SBB       DX,CX
              JNC       MM0
              DEC       WORD PTR N
              ADD       AX,BX
              ADC       DX,CX
              MOV       WORD PTR[Y],AX
              MOV       WORD PTR[Y+2],DX
      ;==============
        MM1:  LEA       DI,CC
              ADD       DI,9
         M2:
              MOV       AX,WORD PTR [Y]
              MOV       DX,WORD PTR [Y+2]
              MOV       BX,10000
              DIV       BX
              PUSH      AX
              PUSH      DX
      ; ============
      ; 以下转换10进制的低4位
              POP       DX
              MOV       CX,4
              MOV       AX,DX
         M3:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M3
      ; ===========
      ; 以下转换10进制的高万位
              POP       AX
              MOV       CX,1
         M4:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M4
      ;=============
              MOV       AX,WORD PTR N
              MOV       CX,5
         M5:  MOV       DX,0
              MOV       BX,10
              DIV       BX
              ADD       DL,30H
              MOV       [DI],DL
              DEC       DI
              LOOP      M5
      ; ============
      ; 输出换行回车
              LEA       DX,LFCR
              MOV       AH,9
              INT       21H
      ; ============
      ; 输出两数的和的10进制串
              MOV       CX,9
              LEA       SI,CC
         M6:
              MOV       AL,[SI]
              CMP       AL,'0'
              JNE       M7
              MOV       BYTE PTR [SI],32
              INC       SI
              LOOP      M6
         M7:
              LEA       DX,CC
              MOV       AH,9
              INT       21H
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
              
           Y  DD        ?
          CC  DB        10 DUP(' '),10,13,'$'
        LFCR  DB        10,13,'$'
           Z  DD        100000
           N  DW        0
    DISPDXAX  ENDP
        CODE  ENDS
              END       START

追问

有简单一些的么?我们刚学到8086系统这一章

追答

刚学的话,这个问题是难了些,因为问题在8位或16位的加法运算已不能解决,需要用到32位的加法运算,要输出32位的结果也不容易。

你可试着做一下 1+2+3+...+100 !

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网