Assembly 装配中扭曲的光标
使用BIOS视频中断,我最终可以在屏幕上移动光标,但当光标到达屏幕末端时,它就会消失。我需要它出现在另一边,我的意思是,如果它直接进入骑乘区,它将出现在屏幕的左侧。有人能告诉我怎么做吗Assembly 装配中扭曲的光标,assembly,x86,bios,vga,Assembly,X86,Bios,Vga,使用BIOS视频中断,我最终可以在屏幕上移动光标,但当光标到达屏幕末端时,它就会消失。我需要它出现在另一边,我的意思是,如果它直接进入骑乘区,它将出现在屏幕的左侧。有人能告诉我怎么做吗 .MODEL SMALL .STACK 1000h .DATA ROW DB 12 ; initial cursor position COL DB 40 .CODE .STARTUP START : MOV AH, 0 ; set video mode MOV AL,
.MODEL SMALL
.STACK 1000h
.DATA
ROW DB 12 ; initial cursor position
COL DB 40
.CODE
.STARTUP
START :
MOV AH, 0 ; set video mode
MOV AL, 3 ; 80x25 color
INT 10H ; video BIOS call
MOV AH, 2 ; set cursor position
MOV BH, 0 ; display page number
MOV DH, 24 ; set bottom row number
MOV DL, 7 ; column number
INT 10H ; video BIOS call
MOV AH,2 ;set cursor position
MOV BH,0 ;display page number
MOV DH,ROW ;row number
MOV DL,COL ;column number
INT 10H ;video BIOS call
MOV BL, 15
INT 10H ;video BIOS call
READ :
MOV AH, 0 ;read keyboard
INT 16h ;BIOS call
CMP AL,0
JZ CSC
CMP AL,'q'
JMP EXIT
CSC :
CMP AH,72
JZ UP
CMP AH,80
JZ DOWN
CMP AH,75
JZ LEFT
CMP AH,77
JZ RIGHT
UP:
SUB ROW, 1
MOV AH,2 ;set cursor position
MOV BH,0 ;display page number
MOV DH,ROW ;row number
MOV DL,COL ;column number
INT 10H ;video BIOS call
JMP READ
DOWN:
ADD ROW, 1
MOV AH,2 ;set cursor position
MOV BH,0 ;display page number
MOV DH,ROW ;row number
MOV DL,COL ;column number
INT 10H ;video BIOS call
JMP READ
RIGHT:
ADD COL, 1
MOV AH,2 ;set cursor position
MOV BH,0 ;display page number
MOV DH,ROW ;row number
MOV DL,COL ;column number
INT 10H ;video BIOS call
JMP READ
LEFT:
SUB COL, 1
MOV AH,2 ;set cursor position
MOV BH,0 ;display page number
MOV DH,ROW ;row number
MOV DL,COL ;column number
INT 10H ;video BIOS call
JMP READ
EXIT : .EXIT
END
您只需在更改位置时添加一个检查,以确保它没有离开边缘。如果有,则将位置设置到屏幕的另一侧 例如,向左移动时,可以执行以下操作:
LEFT:
SUB COL, 1
CMP COL, 0
JGE LEFTOK:
MOV COL, 79
LEFTOK:
从列位置减去1。然后检查它是否大于或等于0。如果是的话,你没事。如果不是,则将列位置设置为79(假设屏幕宽度为80个字符-您希望为此设置一个常量或查找该值)
你可以对其他所有方向做同样的事情
严格来说,在上面的示例中,您不需要
CMP列,0
,因为SUB
将设置适当的标志,但我认为这样代码更清晰。什么操作系统/平台?你是怎么画光标的?你需要提供更多的细节。说真的,你认为我们能理解你的要求吗?请给出上下文,尤其是因为你们在谈论汇编。哪一个操作系统,你在使用BIOS中断,等等…在你提供更多细节之前,我将冒险给出一个通用的解决方案。您首先需要检查光标是否在屏幕外,只需将光标的x值与屏幕宽度进行比较。如果它更大,从x值中减去宽度,然后增加y值。+1有效答案,希望它能让OP了解一些事情……:)非常感谢。这很好用。