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
相关产品推荐
相关产品推荐

