繁体   English   中英

如何在汇编程序中比较字符串的 2 个字符?

[英]How to compare 2 characters of a string in assembler?

我正在尝试编写一个程序,其中输入带有单词的字符串。 然后我们输入要删除的词。 在一个循环中,我试图比较第一个和第二个字符串的字符,但是条件总是返回正数

我正在使用模拟器 emu8086

name test
.model small
.stack 100h
.data       
    wrd_ask db "word: $" 
    string_ask db "string: $"
    
    w_buffer db 255           
    wrd db 256 dup('$')
    
    s_buffer db 255    
    string db 256 dup('$')
.code

macro convert buffer
    push ax
    push dx
    lea dx, buffer
    mov ah, 0Ah
    int 21h 
    pop dx
    pop ax
endm

start: 
    mov ax, @data
    mov ds, ax
    
    mov dx, offset string_ask
    mov ah, 09h
    int 21h
    convert s_buffer
    
    mov dx, offset wrd_ask
    mov ah, 09h
    int 21h
    convert w_buffer
    
    mov si, 0
    mov di, 0  
    mov cx, 255
     
cycle:  
    inc si                
    inc di
    cmp string[si], wrd[di]
    je same

    same:
        mov dl, wrd[di]
        mov ah, 02h
        int 21h  
    
    LOOP cycle
end start
 cmp string[si], wrd[di]

你不能像那样比较两个 memory 字节。 指令集不允许。 在与另一个比较之前,您需要将其中一个加载到寄存器中:

mov  al, string[si]
cmp  al, wrd[di]
 je same same:

你需要介于两者之间的东西(在“不等于”的情况下你想要什么)。 否则,无论比较结果如何,代码都会同时执行。


尝试以下操作:

cycle:  
    inc  si                
    inc  di
    mov  dl, string[si]
    cmp  dl, wrd[di]
    jne  different
    mov  ah, 02h
    int  21h  
    loop cycle
same:
    ...
    mov  ax, 4C00h
    int  21h
different:
    ...
    mov  ax, 4C00h
    int  21h

使用句子:“stackoverflow rocks”
使用这个词:“stackunderflow”

观察结果“stack”(第一个区别是“o”和“u”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM