如何比较两个字符串程序集

时间:2012-12-31 09:30:53

标签: string assembly x86

有人能告诉我如何比较汇编语言中的两个字符串,我写了下面的符号,但它似乎不起作用。

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

2 个答案:

答案 0 :(得分:2)

几年前,当我在学校写作asm时,我遇到了同样的问题。我遇到的问题是我想比较单词“exit”和用户条目。如果他们键入“退出”,则应用程序退出。如果他们输入任何其他内容,则会显示一条消息,告诉他们输入错误。

我解决问题的方法是逐个字符地比较字符串,直到字符不再匹配,反之亦然。

这也可能有用。以下是与汇编语言中的字符串比较相关的一些代码示例:http://www.daniweb.com/software-development/assembly/threads/58667/assembly-language-comparing-strings

您可能还希望在汇编语言中查看与正则表达式(正则表达式)相关的这篇文章:Regular Expressions and Assembly

答案 1 :(得分:-1)

j是跳跃 我少 e是平等的 如果bl = a&bh = k 这里的cmp就像a-k一样工作

如果此处等于或小于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