You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用8086汇编语言通过循环实现1至10的数字求和

嘿,我来帮你搞定8086汇编里用循环求1到10和的问题!这其实是个很经典的入门练习,我给你两个实用的实现方案,再一步步拆解逻辑,保证你能搞懂。

方案一:用BX存当前累加数字,CX做循环计数器

这是最直观的写法,适合刚接触循环指令的同学理解:

.MODEL SMALL
.STACK 100H

.DATA
    SUM DW ?       ; 定义一个16位变量,用来存储最终求和结果

.CODE
MAIN PROC
    ; 初始化数据段(8086必须先做这一步才能访问数据段变量)
    MOV AX, @DATA
    MOV DS, AX

    ; 循环前的准备工作
    MOV CX, 10      ; CX是8086的循环专用计数器,这里设置循环10次(对应1-10)
    MOV AX, 0       ; AX作为累加器,初始化为0,用来逐步存储总和
    MOV BX, 1       ; BX从1开始,每次自增1,代表当前要加的数字

LOOP_START:         ; 循环入口标签
    ADD AX, BX      ; 把当前BX里的数字加到累加器AX中
    INC BX          ; BX自增,准备下一个要加的数字
    LOOP LOOP_START ; LOOP指令自动做两件事:CX减1,若CX≠0则跳回LOOP_START继续循环

    MOV SUM, AX     ; 循环结束后,AX里就是1+2+...+10的结果(55),存到SUM变量里

    ; 程序退出调用DOS中断
    MOV AH, 4CH
    INT 21H
MAIN ENDP
END MAIN
方案二:用CX同时做计数器和累加数字(更简洁)

利用加法交换律,我们可以直接用CX来存当前要加的数字,不用额外的BX寄存器,代码更紧凑:

.MODEL SMALL
.STACK 100H

.DATA
    SUM DW ?

.CODE
MAIN PROC
    MOV AX, @DATA
    MOV DS, AX

    MOV CX, 10      ; CX初始为10,既是循环次数,也是第一个要加的数字
    MOV AX, 0       ; 累加器初始化为0

LOOP_START:
    ADD AX, CX      ; 把当前CX的值加到AX
    LOOP LOOP_START ; CX自动减1,直到CX=0时退出循环(此时已经加完10到1)

    MOV SUM, AX

    MOV AH, 4CH
    INT 21H
MAIN ENDP
END MAIN
关键逻辑拆解

不管用哪个方案,核心都是8086的LOOP指令:

  • LOOP label会自动将CX寄存器的值减1,然后判断CX是否为0
  • 如果CX≠0,就跳转到指定的标签处继续执行循环体
  • 如果CX=0,就执行LOOP指令后面的代码,循环结束

两个方案最终的结果都是55,因为1+2+...+10和10+9+...+1的和是一样的~

如果你之前的尝试代码有问题(比如循环次数错了、累加器没初始化、寄存器冲突之类的),可以把你的代码贴出来,我帮你排查问题!

内容的提问来源于stack exchange,提问作者over

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:59:57