TASM汇编两位数除法代码修复 支持商/余数两位数输出
TASM环境两位数除法程序修复方案(支持两位数商/余数输出)
问题根因
原有程序输入转数值、除法运算的基础逻辑成立,输出异常的核心原因是商和余数的输出逻辑缺失通用两位拆分步骤:直接将0-99范围的二进制数值加'0'(即30h)转ASCII,仅当数值为0-9时能得到正确数字字符,数值≥10时会映射到非数字ASCII字符,导致输出乱码或错误结果。
核心实现逻辑
- 输入处理:保留原有逻辑,逐位读取两位输入字符,每一位减去30h转成真实数值,十位值乘10加个位值,分别得到0-99范围的被除数、除数整数,存入字节变量。
- 除法运算:使用x86 8位除法指令
div,执行前将AH寄存器清0、被除数存入AL,除数存入8位通用寄存器;指令执行后,商自动存入AL,余数自动存入AH,二者取值范围均为0-99,符合两位数输出要求。 - 通用两位输出:对商、余数分别做相同拆分处理:将数值除以10,得到的商为十位数字、余数为个位数字,二者分别加30h转成ASCII字符后依次输出,十位为0时也正常输出,自动补前导零。
修复后可直接运行的完整代码
; 两位数除以两位数汇编程序,支持两位数商/余数输出,适配TASM/TLINK/DOSBox STACK SEGMENT STACK DW 128 DUP(?) STACK ENDS DATA SEGMENT tip_dividend DB 'Input dividend(2 digits): $' tip_divisor DB 0Dh,0Ah,'Input divisor(2 digits): $' tip_quotient DB 0Dh,0Ah,'Quotient: $' tip_remain DB ' Remainder: $' dividend DB ? ; 存储被除数数值 divisor DB ? ; 存储除数数值 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX ; 读取两位被除数 LEA DX,tip_dividend MOV AH,09h INT 21h MOV AH,01h INT 21h SUB AL,30h MOV BL,10 MUL BL MOV dividend,AL MOV AH,01h INT 21h SUB AL,30h ADD dividend,AL ; 读取两位除数 LEA DX,tip_divisor MOV AH,09h INT 21h MOV AH,01h INT 21h SUB AL,30h MOV BL,10 MUL BL MOV divisor,AL MOV AH,01h INT 21h SUB AL,30h ADD divisor,AL ; 执行除法运算 MOV AX,0 MOV AL,dividend MOV BL,divisor DIV BL ; AL=商, AH=余数 MOV CL,AL ; 暂存商 MOV CH,AH ; 暂存余数 ; 输出商 LEA DX,tip_quotient MOV AH,09h INT 21h MOV AL,CL MOV AH,0 MOV BL,10 DIV BL ; AL=十位, AH=个位 MOV DL,AL ADD DL,30h MOV AH,02h INT 21h MOV DL,AH ADD DL,30h INT 21h ; 输出余数 LEA DX,tip_remain MOV AH,09h INT 21h MOV AL,CH MOV AH,0 MOV BL,10 DIV BL MOV DL,AL ADD DL,30h MOV AH,02h INT 21h MOV DL,AH ADD DL,30h INT 21h ; 退出程序返回DOS MOV AH,4Ch INT 21h CODE ENDS END START
编译运行方法
在DOSBox环境中进入代码所在目录,依次执行以下命令:
- 汇编:将代码保存为
DIV.ASM后执行TASM DIV.ASM; - 链接:执行
TLINK DIV.OBJ; - 运行:执行生成的可执行文件
DIV.EXE
样例验证
程序输出严格遵循两位补零格式,测试用例运行结果如下:
- 输入被除数21、除数02:输出
Quotient: 10 Remainder: 01 - 输入被除数21、除数11:输出
Quotient: 01 Remainder: 10 - 输入被除数99、除数01:输出
Quotient: 99 Remainder: 00 - 输入被除数22、除数02:输出
Quotient: 11 Remainder: 00
内容的提问来源于stack exchange,提问作者Devil Blacklist
相关产品推荐
相关产品推荐

