[英]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.