1

アセンブリ言語で2つの文字列を比較する方法を教えてもらえますか?私は次のように書いていますが、うまくいかないようです。

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
4

2 に答える 2

3

何年も前に学校でasmを書いていたときも同じ問題がありました。私が遭遇した問題は、「exit」という単語をユーザーエントリと比較したかったということでした。「exit」と入力すると、アプリケーションは終了します。他に何か入力すると、誤った入力があったことを示すメッセージが表示されました。

私が問題を解決した方法は、文字が一致しなくなるまで、またはその逆になるまで、文字列を文字ごとに比較することでした。

これも役に立つかもしれません。アセンブリ言語での文字列比較に関連するいくつかのコード例を次に示します。http ://www.daniweb.com/software-development/assembly/threads/58667/assembly-language-comparing-strings

アセンブリ言語の正規表現(regex)に関連するこの記事も参照してください:正規表現とアセンブリ

于 2012-12-31T10:38:44.313 に答える
-4

jはジャンプlは少ないeは等式ですここでbl=a&bh=kここでcmpはakのように機能します

ここで0以下の値の場合、jleは機能します。その後、nが機能します。正の値のjleが機能しない場合。

cmp bl、bh jle n

mov ah、2 mov dl、bh int 21h

n:mov ah、2 mov dl、bl int 21h

于 2019-02-13T10:01:46.173 に答える