在DEBUG.EXE中编写数字比较程序遇问题,求正确实现方案
DEBUG下实现输入两个数字并输出最大值的正确代码
原代码的核心错误
- DOS中断
int 21h的01号功能(字符输入回显),返回的输入字符ASCII码存在AL寄存器,不是DL,原代码搞反了存储逻辑 - 输出字符应该用
int 21h的02号功能(ah=02),原代码错误继续用01号输入功能,导致程序异常 - COM程序不能直接用
ret退出,必须调用DOS退出功能,否则会触发内存错误崩溃
正确的DEBUG操作代码序列
n prog.com a 100 ; 输入第一个数字,将ASCII码存入BL mov ah, 01 int 21 mov bl, al ; 输入第二个数字,将ASCII码存入CL mov ah, 01 int 21 mov cl, al ; 比较两个数字的ASCII码(数字ASCII连续,直接比较即可) cmp bl, cl jae 0110 ; 若第一个数更大/相等,跳转到输出第一个数的逻辑 ; 输出第二个数 mov ah, 02 mov dl, cl int 21 jmp 0115 ; 跳转到退出程序的逻辑 0110: ; 输出第一个数 mov ah, 02 mov dl, bl int 21 0115: ; 调用DOS退出功能,返回系统 mov ah, 4c int 21
保存并运行步骤
- 输入完上述汇编代码后,按
Enter再按Ctrl+C退出汇编模式 - 执行
r cx设置程序长度,输入25(对应上述代码的字节数) - 执行
w将程序写入磁盘 - 执行
q退出DEBUG - 在DOSBox中运行
prog.com,输入两个数字后即可看到最大值输出
内容的提问来源于stack exchange,提问作者SerGo2022
相关产品推荐
相关产品推荐

