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

DOSBox Debug汇编环境下如何修改代码实现输入字符串逆序打印

汇编输入字符串逆序输出实现

问题背景

基于授课教师提供的汇编示例代码,调整逻辑实现输入内容的逆序输出。

原有示例代码

e200 "Name: $"
e300 "Hello, $"
a100
mov ah, 09
mov dx, 200
int 21
mov bx, 400
mov ah, 01
int 21
mov [bx], al
inc bx
cmp bx, 405
jne 10a
mov cl, 24
mov [bx], cl
mov ah, 02
mov dl, 0a
int 21
mov dl, 0d
int 21
mov ah, 09
mov dx, 300
int 21
mov ah, 09
mov dx, 400
int 21
int 20

原有运行效果

Name: Maria
Hello, Maria

预期实现效果

Name: Maria
Hello, ariaM

改造方案

原代码逻辑是读取5个输入字符存入400h起始的内存段,在段末加$结束符后直接用DOS 09h号功能从首地址正序输出字符串。要实现逆序输出,不需要改动前面的提示语打印、字符读入逻辑,只需要替换原有的正序输出输入串的部分,从输入内存段的最后一个字符开始,从后往前逐个用单字符输出功能打印即可。
改造后的完整代码如下:

e200 "Name: $"
e300 "Hello, $"
a100
mov ah, 09
mov dx, 200
int 21
mov bx, 400
; 读取5个输入字符存入400h~404h地址
mov ah, 01
int 21
mov [bx], al
inc bx
cmp bx, 405
jne 10a
; 输出回车换行
mov ah, 02
mov dl, 0a
int 21
mov dl, 0d
int 21
; 输出Hello, 前缀
mov ah, 09
mov dx, 300
int 21
; 逆序输出输入的字符
mov bx, 404  ; 指向最后一个输入字符的存储地址
mov dl, [bx]
mov ah, 02
int 21
dec bx
cmp bx, 3ff  ; 判断是否已经输出完第一个字符(地址400h)
jne 129
; 程序退出
int 20

核心修改点

  • 删除原代码中在输入缓冲区末尾写入$、调用09h功能从400h地址正序打印输入串的冗余逻辑
  • 输入完成后将地址指针指向输入段的最后一位(404h)
  • 循环调用DOS 02h号单字符打印功能,每打印一个字符就将地址指针减1,直到5个字符全部打印完成,自动实现逆序效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:45:29