[ASM] kursor i tekst

0

chcę zrobić tak:
ustawiam sobie kursor gdzieś na ekranie (wiem jak to zrobić)
i sprawdzam czy pod nim jest jakiś znak różny od spacji, jeżeli tak to <ort>przesówam </ort>kursor w lewo aż nie napotkam spacji (to też jako tako wiem)
i teraz mój problem
jeżeli napotkało na spację to od tego momentu ma się <ort>przeówać </ort>w prawo i zapisywać to co jest pod kursorem (tworząc wyraz) aż napotka kolejną spację
potem ma sprawdzić czy tym wyrazem jest np adam jeśli tak to ma skoczyć do jakiejś etykietki
wygląda to tak:
asbfe - tekst
X -tu się znajduje kursor

asdqefXadsfe //w prawo aż nie napotka spacji
Xasdqefgadsfe //napotkał w spacje to teeraz w prawo
asdqefgadsfeX // napotkał spacje kończy, w międzyc zasie zapisuje gdzieś wszystkie literki po drodze

teraz porónanie literek
jeżeli asdqefgadsfe = adam to skok do etykiety aa
jeżeli nie to skok do bb

pomóżcie proszę

tam ma być w lewo przy pierwszym, pomyłka sorka

0

Nie powinienem mieć z tym problemu dzisiaj wieczorem może jutro prześle ci kod :P

0

dzieki ale ja to potrzebuje dzisiaj ;p
już w zasadzie mam ale jak robie porównanie
cmp ds:[string+si],ds:[string1+si]
to wyskakuje illegal memory reference

0

Nie ma problemu, poniżej programik pod TASM, nie wiele czasu mi <ort>zajoł </ort>jakieś 15 minut :P Procki mają objaśnione co do nich wchodzi.

.model TINY
.code
org 100h
start:
mov ax,cs
mov es,ax
mov ds,ax

mov ah,09
lea dx,tekst
int 21h

mov di,3
mov ax,3
lea si,buf
call czytaj

lea di,slowo
lea si,buf
call comper
lea dx,TOK
or ax,ax
jz Done
lea dx,TNIE
Done:
mov ah,09
int 21h

lea dx,buf
mov ah,9
int 21h

lea dx,slowo
mov ah,9
int 21h

xor ax,ax
int 16h
mov ax,4ch
int 21h

; di <-x;
; ax <-y;
; Si <-bufor
czytaj:
dec di
dec ax
push es
mov bx,0B800h
mov es,bx
xor dx,dx
mov bx,160
mul bx
shl di,1
add di,ax

petla1:
mov al,es:[di]
cmp di,0
je nara
dec di
dec di
cmp al,' '
jne petla1
inc di
inc di
inc di
inc di
nara:
pet2:
mov al,es:[di]
inc di
inc di
mov [si],al
inc si
cmp al,' '
jne pet2
mov al,'$'
mov [si-1],al
pop es
ret

; WE: si <- bufor
; WY: CX <- rozmiar
_Length:
xor cx,cx
_petla:
mov al,[si]
inc cx
inc si
cmp al,'$'
jne _petla
dec cx
ret

;WE:
; SI <- tekst 1
; Di <- tekst 2
;WY:
; AX <- 0 teksty rowne!!
Comper:
push si
call _length
pop si
xor ax,ax
rep cmpsb
je ok
mov ax,1
ok:
ret

tekst DB 13,10,13,10,"Hello Word!!!! ",13,10,"$"
Slowo DB "Hello$"
TOK DB 13,10,"Rowne!$"
TNIE DB 13,10,"Rozne!$"
Buf DB 256 dup(?)
end start

1 użytkowników online, w tym zalogowanych: 0, gości: 1