Assembly 装配中扭曲的光标

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,

使用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

您只需在更改位置时添加一个检查,以确保它没有离开边缘。如果有,则将位置设置到屏幕的另一侧

例如,向左移动时,可以执行以下操作:

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了解一些事情……:)非常感谢。这很好用。