Ich mache ein Spiel in Assembly mit EMU8086 für ein Projekt in der Schule. In diesem Spiel muss ich dem Benutzer erlauben, eine Zeichenfolge einzugeben, um fortzufahren. Während er die Zeichenfolge eingibt, könnte er etwas falsch eingeben und die Rücktaste verwenden, um es zu korrigieren. Das Problem ist, dass die Rücktaste den Cursor über das vorherige Zeichen bewegt, aber das zuvor eingegebene Zeichen bleibt. Warum löscht die Rücktaste nicht das vorherige Zeichen? Wie kann ich mein Programm reparieren, so dass das vorherige Zeichen auf dem Bildschirm entfernt wird?Löschen eines Zeichens auf dem Bildschirm
My-Code ist:
data segment
ends
stack segment
dw 128 dup(0)
ends
StringHelper db 20 dup(?)
Line db 13,10,'$'
FullInput db 'You cant type more than 20 letters!!! please try again!!',13,10,'$'
t db '$'
code segment
PROC PrintMessage
;BX MUST have OFFSET OF MESSAGE
; if you want to go down a line do (lea bx,line)
mov dx,bx
mov ah,09h
int 21h
ret
endp printMessage
proc InputString
;askes the user to input chars untill he press (enter) then puts it in StringHelper
b:
lea bx, StringHelper
mov cx,5
xor dx,dx
a: ;restarts string helper
mov [bx],00
inc bx
loop a
lea bx, StringHelper
up:
cmp dx,20 ;cheacks if you wrote more than 20 chars
jz TryAgain
deleted:
xor ax,ax
mov ah,01h
int 21h
xor ah,ah
mov cx,08h ;checks if the user inputed the backspace key
cmp al,cl
jz BackSpace
mov cx,0dh
cmp al, cl ;checks if the user enters enter
jz InputIsOver
inc dx
mov [bx],al
inc bx
jmp up
TryAgain:
lea bx, line
call PrintMessage
lea bx, FullInput
call PrintMessage
jmp b:
BackSpace:
cmp dx,0 ;checks if te user didnt just BackSpaced nothing
jz deleted
lea bx,stringhelper ;gets the start of the array
add bx,dx ;adds dx which is the indexer to how many chars you already wrote
mov [bx],00h ;puts 0(nothing) at that place
dec bx
dec dx
jmp deleted ;returen to get an extra input
InPutIsOver:
ret
endp
start:
mov ax, @data
mov ds, ax
mov al,13h
int 10h
call InputString
; add your code here
mov ax, 4c00h
int 21h
ends
end start
Das riesige Wand von nicht-eingerückten Code wäre besser lesbar, wenn Sie zwischen einzelnen Code-Blöcken Leerzeilen und solche Dinge gelassen haben. Zumindest die Kommentare sehen vernünftig aus (sie sagen, warum der Code tut was auch immer). –