【发布时间】:2015-06-10 23:32:50
【问题描述】:
到目前为止,我已经创建了一个程序来读取箭头键并在屏幕上移动光标。首先,用户必须输入 0 才能开始,并且可以在 getch() != 27 (ESC) 时四处移动。但是,光标根本不动。
model tiny
.code
org 100h
program:
mov cx, 10
mov ah, 7
int 21h
cmp al, 0 ; start
je clearS ; clear screen
start:
mov ah, 7 ; AL = getch()
int 21h
cmp al, 27 ; ESC
je fin
cmp al, 72
je moveUp
cmp al, 75
je moveLeft
cmp al, 77
je moveRight
cmp al, 80
je moveDown
moveRight:
mov dl, posY
inc dl ; posY ++
mov posY, dl
jmp prntCrs
jmp start
moveLeft:
mov dh, posX
mov dl, posY
dec dl ; posY --
mov posY, dh
jmp prntCrs
jmp start
moveUp:
mov dl, posY
mov dh, posX
dec dh ; posX --
mov posX, dh
jmp prntCrs ; print cursor
jmp start
moveDown:
mov dl, posY
mov dh, posX
inc dh ; posX ++
mov posX, dh
jmp prntCrs
jmp start
prntCrs: ; print cursor
mov ah, 2h
int 10h
clearS: ; clear screen
mov ah, 7
mov al, 25
mov ch, 0
mov cl, 0
mov dh, 24
mov dl, 79
int 10h
mov ah, 2
mov bh, 0
mov dh, 0
mov dl, 0
int 10h
jmp start
fin:int 20h
posX db 1 dup(0) ; dh = posX -> controls row
posY db 1 dup(0) ; dl = posY -> controls column
end program
----------------------------------------------- -------------------
假设我有这个:
moveDown:
mov dl, posX
mov dh, posY
cmp dh, 9 ; limit
je stayLine
inc dh ; posY ++
mov posY, dh
add curr_line, 36 ;increment by line/string size
jmp prntCrs
goBackLine:
mov dl, posX
mov dh, posY
cmp dh, 1 ; limit
je stayLine
mov dl, 37
dec dh
mov posX, dl
mov posY, dh
sub curr_line, 36 ; go to start of last line
add curr_char, 35 ; to go to last char of last line
jmp prntCrs
nextLine:
mov dl, posX
mov dh, posY
mov dl, 1
inc dh
mov posX, dl
mov posY, dh
add curr_line, 36
mov curr_char, 0 ; or move it to whatever dl is?
jmp prntCrs
posX db 1 dup(1) ; dl = posX -> controls column
posY db 1 dup(1) ; dh = posY -> controls row
xlimit dw 38 ; number of columns (w/ border)
ylimit dw 10 ; number of rows (w/ border)
matrix db 36*8 dup(42)
curr_line dw ? ; pointer to current line
curr_char dw ? ; pointer to current char
如何保存用户输入?
mov si, offset ???
add si, curr_char
mov byte ptr [si], al
mov cl, dl ; to not lose value of posX
mov dl, al ; to be able to print
mov ah, 2h ; character output
int 21h ; display character in dl
mov dl, cl
inc dl ; to move right
mov posX, dl ; update posX
cmp posX, 38
je nextline
inc si
jmp writing
【问题讨论】:
-
您的编辑过多地改变了您的问题,将其更改为另一个问题并使答案无效。这是不允许的。您应该在新帖子中提出更新后的问题。
-
对不起……这将是我最后一次这样做。我发布了另一个问题,但很快就被拒绝了,我真的很想了解一些我没有教过的东西。
-
将新问题附加到现有问题上也不起作用。很少有人会看到它,也没有人会费心回答它。编辑已关闭的问题,以便将其缩小到可以回答的范围内,您将获得更好的运气。我们不能教你编程,也不能为你编写编辑器。您的问题需要更具体,我们才能为您提供帮助。
标签: assembly text keyboard text-editor