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

如何编写16位EXE汇编程序实现逐行递增输出字符串字符?

16位TINY模型EXE程序修正方案

你的代码存在几个关键问题,导致无法实现“逐行递增输出字符”的需求,下面直接说明问题并给出修正后的代码:

原代码的核心问题

  • 循环逻辑完全反向:你从5个字符开始递减输出,结果是先出5个、再出4个…和要求的“第一行1个、第二行2个”完全相反。
  • int 21h ah=9的用法错误:这个DOS中断是输出到第一个$为止,原字符串末尾的$会让你每次输出从指定位置到结尾的所有字符,没法只输出前n个字符。

修正后的代码(逐个字符输出法)

这种方法用单个字符输出中断,逻辑直观,适合新手理解:

.MODEL TINY
.STACK 100h

code:
    mov cx, 0          ; cx记录当前行要输出的字符数,从1开始递增
next_line:
    inc cx             ; 每行多输出一个字符
    mov si, 0          ; si指向字符串起始位置
    mov bx, cx         ; bx保存当前行的字符数,作为内层循环计数器
print_char:
    mov dl, mess1[si]  ; 取出当前要输出的字符
    mov ah, 2          ; DOS中断:输出单个字符
    int 21h
    inc si
    dec bx
    jnz print_char     ; 内层循环:输出完当前行的所有字符

    ; 输出回车换行
    mov dl, 13         ; 回车符
    mov ah, 2
    int 21h
    mov dl, 10         ; 换行符
    mov ah, 2
    int 21h

    cmp cx, 5          ; 判断是否输出到最后一行(字符串长度为5)
    jl next_line       ; 没到就继续下一行

    ; 正常退出程序
    mov ah, 4Ch
    mov al, 0
    int 21h

; 数据定义
mess1 db "Artem"       ; 这里不需要加$,因为逐个输出字符
end code

另一种方案(动态缓冲区法)

如果想沿用你原来用int 21h ah=9输出字符串的思路,可以通过临时缓冲区复制前n个字符并添加$来实现:

.MODEL TINY
.STACK 100h

code:
    mov cx, 0          ; 当前行要输出的字符数
    lea di, temp_buf   ; di指向临时缓冲区起始
next_line:
    inc cx
    mov si, 0          ; si指向原字符串起始
    mov bx, cx         ; bx保存要复制的字符数
copy_loop:
    mov al, mess1[si]
    mov [di], al
    inc si
    inc di
    dec bx
    jnz copy_loop
    mov byte ptr [di], '$'  ; 在缓冲区末尾添加结束符$

    ; 输出当前行内容
    lea dx, temp_buf
    mov ah, 9
    int 21h

    ; 输出回车换行
    lea dx, crlf
    mov ah, 9
    int 21h

    lea di, temp_buf   ; 重置缓冲区指针
    cmp cx, 5
    jl next_line

    ; 正常退出程序
    mov ah, 4Ch
    mov al, 0
    int 21h

; 数据定义
mess1 db "Artem"
crlf db 13, 10, "$"
temp_buf db 10 dup(?)  ; 临时缓冲区,足够容纳字符串和结束符
end code

补充说明

  • 两种方案都是从1个字符开始,逐行递增到5个字符,完全符合需求。
  • 第一个方案逻辑更简单,不需要处理字符串结束符,适合新手学习。
  • 退出程序时al设为0表示正常退出,原代码设为1是错误退出码,无特殊需求没必要设置。

内容的提问来源于stack exchange,提问作者Артем Лебідь

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:13