使用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, 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
答案 0 :(得分:1)
您只需在更改位置时添加一个检查,以确保它没有移出边缘。如果有,则将位置设置为屏幕的另一侧。
例如,当向左移动时,您可以执行以下操作:
LEFT:
SUB COL, 1
CMP COL, 0
JGE LEFTOK:
MOV COL, 79
LEFTOK:
从列位置减去1。然后你检查它是否大于或等于0.如果是,你没问题。如果没有,则将列位置设置为79(假设屏幕宽度为80个字符 - 您希望为此设置常量或查找该值)。
你可以为所有其他方向做同样的事情。
严格来说,您不需要上面示例中的CMP COL,0
,因为SUB
无论如何都会设置相应的标记,但我认为代码更清晰。