我试图使一个球与大会8086 NASM使用的INT 10H和DOSBOX,在UBUNTU
就像这样:
MOV AH, 0Ch ; function to write the pixel
MOV AL, 0Fh ; color of the pixel (set to white)
MOV BH, 00h ; the page number (0 because its the only page im working on)
MOV CX, 160 ; X Position on the screen
MOV DX, 100 ; Y Position on the screen
INT 10h
我正在使用360x200视频模式,所以像素显示在中间,这是它的工作方式:https://imgur.com/BS62ohp
当我直接将值赋给CX和DX(x和y位置)时,一旦我将其转换为初始化变量,像素显示得非常好,它消失了,屏幕完全变黑。没有bug,没有任何警告,这里它变成了变量:
segment .data
BALL_X DW 160
BALL_Y DW 100
segment .text
global main
main:
MOV AH, 0Ch
MOV AL, 0Fh
MOV BH, 00h
**MOV CX, [BALL_X]**
**MOV DX, [BALL_Y]**
INT 10h
我试过“[BALL_X]",“word [BALL_X]",“BALL_X”。这是我把它转换成变量的时候:https://imgur.com/6jXqoaq
下面是完整的代码:
segment .data
BALL_X DW 300
BALL_Y DW 170
segment .text
global main
main:
; setting the video mode to 360x200
MOV AH, 00h
MOV Al, 13h
INT 10h
; setting the background color to Black
MOV AH, 0Bh
MOV BH, 00h
MOV BL, 0h
INT 10h
; the pixel code
MOV AH, 0Ch
MOV AL, 0Fh
MOV BH, 00h
MOV CX, word [BALL_X]
MOV DX, word [BALL_Y]
INT 10h
1条答案
按热度按时间e0uiprwp1#
COM程序使用“微小”内存模型:文本、数据和堆栈在同一段中。代码从偏移100h开始。您需要在文件开头使用
org
指令指定此偏移量:但是直接绘制到视频内存比使用
int 10h
服务绘制要快得多: