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
相关产品推荐
相关产品推荐

