使用TASM与DOSBox设置背景色并输出字符串时出现异常求助
TASM程序乱码问题修复
核心问题:未初始化数据段寄存器(DS)
使用small内存模型时,程序的数据段和代码段是分离的,必须手动将数据段的段地址加载到DS寄存器中,否则程序无法正确访问.data段里的prompt变量,读取的是随机内存内容,最终导致输出乱码。修复方法:
在start标签后添加两行代码完成DS寄存器初始化:mov ax, @data mov ds, ax修复后的完整代码:
.model small .stack 100h .data prompt db 13, 10, 'Hello Gaiz!', '$' .code start: mov ax, @data ; 将数据段地址存入AX寄存器 mov ds, ax ; 给DS赋值,让程序能正确访问数据段 call color ; 调用背景色设置过程 call output mov ax, 4C00h ; 执行程序退出操作 int 21h output proc mov ah, 09h lea dx, prompt int 21h ret output endp color proc MOV AH, 06h ; 调用屏幕上滚功能实现清屏 XOR AL, AL ; AL置0表示清除整个屏幕 XOR CX, CX ; 设置左上角坐标为(0,0) MOV DX, 184FH ; 设置右下角坐标为(24,79),对应标准80x25字符屏幕 MOV BH, 42H ; 背景色设为红色,前景色设为绿色 INT 10H ret color endp end start补充说明:
@data是汇编器提供的内置符号,直接对应.data段的段地址- INT 10H的06h功能中,BH寄存器的高4位代表背景色,低4位代表前景色,你设置的42H是合理的
内容的提问来源于stack exchange,提问作者Weakerboys
相关产品推荐
相关产品推荐

