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

DOSBox下汇编程序打印二进制数异常问题求助

问题分析与修复方案

你的汇编代码存在两个核心问题,导致无法正确打印二进制数、反而输出空格(不可见字符),以下是具体问题和修复步骤:

1. 二进制位未转换为ASCII字符

你在转换二进制位时,直接将数值0或1存入binForm,但DOS打印函数识别的是ASCII编码字符:

  • ASCII中'0'的编码是30h(十进制48),'1'是31h(十进制49)
  • 你存入的0对应ASCII空字符(NUL),1对应SOH,DOS下这些字符会显示为空格

修复逻辑:

修改convert_to_binary段的位转换代码,将数值转换为对应的ASCII字符:

convert_to_binary:
    rol al, 1          ; 左循环取出最高位到进位标志
    mov bh, '0'        ; 先初始化为ASCII的'0'
    adc bh, 0          ; 若有进位,'0'加1变为'1'
    mov [di], bh       ; 将ASCII字符存入binForm
    inc di             ; 移动到下一个位置
    loop convert_to_binary

也可以用等价写法:

convert_to_binary:
    rol al, 1
    mov bh, 0
    adc bh, '0'        ; 直接将进位值加到'0'上得到对应ASCII字符
    mov [di], bh
    inc di
    loop convert_to_binary

2. 字符串打印包含冗余符号

你的string定义带有$符号:string db 'HELLO WORLD$', 0,但你用lodsb逐个字符打印时,会把$也输出(直到遇到0才停止)。如果不需要打印$,应移除该符号:

string db 'HELLO WORLD', 0  ; 移除多余的$符号

完整修复后的代码

org 100h
number db 0AFh      ; 要显示的8位二进制数
string db 'HELLO WORLD', 0  ; 待转换并显示的字符串
binForm db '00000000$', 0    ; 二进制格式占位符

start:

    ; 将数字转换为二进制格式
    mov cx, 8          ; 处理8个比特位
    mov al, number
    mov di, binForm    ; 指向binForm的起始地址

convert_to_binary:
    rol al, 1          ; 左循环,将当前最高位移到进位标志
    mov bh, '0'        ; 初始化为ASCII的'0'
    adc bh, 0          ; 加上进位值,得到'0'或'1'
    mov [di], bh       ; 保存ASCII字符到binForm
    inc di             ; 移动到下一个字节
    loop convert_to_binary

    ; 打印二进制格式
    mov ah, 09h
    mov dx, binForm    ; 指向binForm
    int 21h

    ; 换行
    mov dl, 13
    mov ah, 02h
    int 21h
    mov dl, 10
    int 21h

    ; 转换并打印字符串
    mov si, string

print_string:
    lodsb             ; 将字符串字节加载到AL
    or al, 20h        ; 转换为小写
    cmp al, 0         ; 检查是否为终止符0
    je done           ; 是则跳转到结束
    mov ah, 02h
    int 21h           ; 打印字符
    jmp print_string  ; 循环处理下一个字符

done:
    mov ax, 4C00h     ; 退出到DOS
    int 21h

运行效果

修复后,代码会先输出10101111(对应0AFh的二进制),然后换行输出小写的hello world,最后正常退出DOSBox环境。

内容的提问来源于stack exchange,提问作者Terrible Terror

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:50