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

MASM615 Int 10h绘图程序在DOSBox正常,Windows XP模拟器显示异常

问题分析与解决方法

问题根源

你的汇编程序在DOSBox和iPad的Windows XP模拟器中显示差异,核心原因是显示模式的像素宽高比不一致:

  • DOSBox默认模拟传统4:3比例的CRT显示器,Int 10h的11h模式(640x480分辨率)是标准4:3,每个像素为正方形,50x50的边框自然显示为正方形。
  • iPad的Windows XP模拟器因屏幕是16:9/16:10比例,可能将640x480画面强制拉伸适配屏幕,导致水平像素被拉长,原本的正方形边框变成矩形。

解决方法

方法1:调整模拟器显示比例设置

进入iPad上Windows XP模拟器的显示设置,找到分辨率/比例适配选项,选择「保持原始比例」或「4:3比例」,禁止画面拉伸。这样640x480的画面会以正确的4:3比例显示,正方形边框就能正常呈现。

方法2:修改程序适配宽高比

如果无法调整模拟器设置,可以修改代码,根据640x480的宽高比(4:3)调整水平方向的绘制长度,确保边框在不同比例下仍近似正方形:

.model small
.stack 100h 
.data
.code
main proc
; Set Graphics Mode
    MOV AX,11h; 640x480 B/W graphics mode
    INT 10h
; Displaying Pixel
    MOV AH, 0Ch; Write pixel
    MOV AL, 01h ;white Color
    MOV CX,120 ; X start
    MOV DX,120;  Y start

; 垂直边:x=120,y从120到70(50像素)
.repeat
    int 10h
    dec dx
.until(dx==70)

; 水平边:y=70,x从120到53(67像素,对应50*(640/480)≈67)
.repeat
    int 10h
    dec cx
.until(cx==53)

; 垂直边:x=53,y从70到120(50像素)
.repeat
    int 10h
    inc dx
.until(dx==120)

; 水平边:y=120,x从53到120(67像素)
.repeat
    int 10h
    inc cx
.until(cx==120)

ClearScreen:
    MOV AH, 08h ; input without echo
    INT 21h
.IF AL != 13
    JMP ClearScreen
.ENDIF
; Switch to text mode
    mov al , 03
    mov ah,0
    int 10h

mov ah,4ch
int 21h
main endp
end main

方法3:使用正方形像素的显示模式

如果模拟器支持,可改用Int 10h的12h模式(640x480彩色),本质还是要确保模拟器以原始比例渲染画面,避免拉伸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:23:11