Okulda bir proje için EMU8086 kullanarak montajda bir oyun yapıyorum. Bu oyunda, ilerlemek için kullanıcının bir dize girmesine izin vermem gerekiyor. Dizeye girerken yanlış bir şey yazabilir ve düzeltmek için backspace'u kullanabilir. Sorun, backspace imlecin önceki karaktere göre hareket etmesidir, ancak daha önce girilen karakter kalır. Backspace neden önceki karakteri temizlemiyor? Programımı, ekrandaki önceki karakter kaldırılacak şekilde nasıl düzeltebilirim?Ekranda bir char silme
Benim kodudur: backspace karakterini baskı tipik ekranlar ve terminal emulatörleri için
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
değil-girintili kodunun dev duvar olurdu Yani Ayrı kod blokları ve bunlar gibi şeyler arasında boş satırlar bıraktıysanız daha okunabilir. En azından yorumlar makul görünüyor (kodun neden her şeyi yapıyor olduğunu söylüyorlar). –