【问题标题】:How to compare two strings assembly如何比较两个字符串汇编
【发布时间】:2012-12-31 09:30:52
【问题描述】:

谁能告诉我如何用汇编语言比较两个字符串,我已经写了followign,但它似乎不起作用。

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

【问题讨论】:

  • 它似乎不起作用的什么方式?你期待什么,而你得到了什么?
  • 好吧,我应该看看 sirscurt 是否在 sirlung 中,例如“ab”在“cdabe”中,但它似乎不起作用,我认为 jumpres 有问题
  • 你可能想看看我对stackoverflow.com/questions/13616384/…的回答。

标签: string assembly x86


【解决方案1】:

几年前,我在学校写 asm 时遇到了同样的问题。我遇到的问题是我想将“退出”一词与用户条目进行比较。如果他们键入“exit”,则应用程序退出。如果他们输入了其他内容,则会出现一条消息,告诉他们输入有误。

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

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

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

【讨论】:

    【解决方案2】:

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

    如果此处为 0 或小于等于值,则 jle 工作。 然后 n 将起作用。如果正值 jle 不起作用。

    cmp bl,bh jle n

    mov 啊,2 mov dl,bh 整数 21 小时

    n: mov 啊,2 mov dl,bl 整数 21 小时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2022-06-29
      • 1970-01-01
      • 2019-01-14
      • 2022-01-22
      相关资源
      最近更新 更多