Vergleichen von zwei strings Montage
Könnte mir jemand sagen wie das vergleichen von zwei strings in Assembler, die ich geschrieben habe, die followign, aber es scheint nicht zu funktionieren.
assume cs:code, ds:data
data segment
sirlung db "abcdjjj"
lungimelung equ $-sirlung
sirscurt db "aby"
lungimescurt equ $-sirscurt
exista db "Exista!$"
nuexista db "NU exista!$"
iesire db "Apasa enter pentru iesire!$"
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,offset sirlung
mov di,offset sirscurt
dec bx
push bx
push di
mov dx,lungimelung
mov si,lungimescurt
bucla1:
pop di
pop bx
inc bx
mov al,sirlung[bx]
mov cl,sirscurt[di]
cmp al,cl
jne bucla1
push bx
push di
je bucla2
cmp bx,dx
ja sfarsit_nu_exista
bucla2:
inc bx
inc di
mov al,sirlung[bx]
mov cl,sirscurt[di]
cmp al,cl
jne bucla1
cmp di,si
jl sfarsit_exista
jae bucla2
sfarsit_exista:
mov dx,offset exista
mov ah,09h
int 21h
mov ah, 0ah
mov dx,offset iesire
int 21h
mov ax,4c00h
int 21h
sfarsit_nu_exista:
mov dx,offset nuexista
mov ah,09h
int 21h
mov ah, 0ah
mov dx,offset iesire
int 21h
mov ax,4c00h
int 21h
code ends
end start
- Es welcher Weise wird es nicht scheinen, um zu arbeiten? Was hast du erwartet und was hast du stattdessen bekommen?
- Nun, ich sollte, ist, ob die sirscurt ist in sirlung zum Beispiel "ab" wird im "cdabe" aber es scheint nicht zu funktionieren, ich denke das ist etwas falsch mit der jumpres
- Sie können prüfen wollen, meine Antwort an stackoverflow.com/questions/13616384/....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem, wenn ich schreiben asm in der Schule, vor Jahren. Das problem begegnete ich war, dass ich wollte, um zu vergleichen das Wort "exit" mit einer Benutzer-Eintrag. Wenn Sie eingegeben "exit", die Anwendung zu beenden. Wenn Sie tippte irgendetwas anderes, eine Nachricht erschien Ihnen zu erzählen, es war ein fehlerhafter Eintrag.
Die Art, wie ich das Problem gelöst, war ein Vergleich der Zeichenfolgen Zeichen für Zeichen, bis das Zeichen nicht mehr abgestimmt, oder Umgekehrt.
Diese auch vielleicht von einigem nutzen sein. Hier sind einige code-Beispiele in Bezug auf string-Vergleich in assembly-Sprache: http://www.daniweb.com/software-development/assembly/threads/58667/assembly-language-comparing-strings
Vielleicht wollen Sie auch bei diesem Artikel über reguläre Ausdrücke (regex) in Assembler-Sprache: Reguläre Ausdrücke und Montage
j ist springen
l weniger
e ist equel
wenn bl=a & bh=k
hier cmp, ist die Arbeit wie a-k
wenn hier 0 oder weniger-den gleichen Wert dann jle Arbeit.
dann n wird die Arbeit. wenn positiver Wert jle nicht arbeiten.
cmp bl,bh
jle n
mov ah,2
mov dl,bh
int 21h
n:
mov ah,2
mov dl,bl
int 21h