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

8086汇编如何最小改动将星号三角改为逐行递增数字三角

实现方案

不需要全量重写现有代码,仅需调整3处极小逻辑即可实现需求,原有代码的多层循环结构、行数计数、空格打印、换行处理逻辑全部可以保留,总改动代码不超过4行。

具体改动说明

  • 将原代码中空格打印完成后跳转的L2标签调整为跳转至新增的初始化节点,在该节点新增1条指令,把每行要打印的起始字符初始化为'0'
  • 删除原星号打印逻辑中固定给DL寄存器赋值'*'的指令
  • 在每次调用中断输出单个字符后,新增1条INC DL指令,让待输出的字符ASCII码自增,实现连续数字输出

修改后可直接运行的完整代码

.MODEL SMALL
.STACK 100H
.DATA
STAR DB ?
BLANK DB ?
.CODE 

MAIN PROC
      MOV AX,@DATA
      MOV DS,AX

      MOV CX,10
      MOV BH,10
      MOV BL,0

      MOV STAR,BH
      MOV BLANK,BL

      L1:
      CMP BLANK,0
      JE L2_INIT

      MOV AH,2
      MOV DL,32
      INT 21H
      DEC BLANK

      JMP L1

      L2_INIT:
      MOV DL,'0'
      L2:
      MOV AH,2
      INT 21H
      INC DL
      DEC STAR
      CMP STAR,0
      JNE L2

      MOV AH,2
      MOV DL,0AH
      INT 21H
      MOV DL,0DH
      INT 21H
      DEC BH    
      MOV STAR,BH
      INC BL    
      MOV BLANK,BL  
      LOOP L1

      EXIT:
      MOV AH,4CH    
      INT 21H

MAIN ENDP
END MAIN

效果说明

代码运行后会保持原有星号三角形的排版逻辑:第一行无缩进输出0123456789,第二行缩进1个空格输出012345678,逐行递减长度,直到最后一行缩进9个空格输出0,和需求完全匹配。因为0-9的ASCII码是连续递增的,直接对存字符的DL寄存器做自增就可以得到正确的下一个数字字符,不需要额外做数值转ASCII的处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:39:19