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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:17