前言
本次是该系列的的第0x11篇,二进制数据比较,可以是字符串也可以不是,用于判断比较结果是否相同
实验环境:
- Windows10 + VS2022 + masm
0x11
代码片段链接:xorpd | xchg rax,rax 0x11
.loop:
mov dl,byte [rsi]
xor dl,byte [rdi]
inc rsi
inc rdi
or al,dl
loop .loop
代码分析
这里使用了rsi和rdi分别指向要进行比较的两个数据,把这两个数据的第一字节进行异或操作保存到dl,然后通过or操作把值保存到al里,因为or运算只会让结果变大而不会变小,所以以至于会出现两种情况,就是dl的值始终为0,或者不是,若dl的值始终为0,则表示上面的异或操作的两个操作数始终相同,则表示两边数据是相同的,反之则表示两边数据不相同此处的功能是对比两个二进制数据
测试代码:
.data
testStr1 db "12345",0
testStr2 db "12345",0
.code
main proc
lea rsi, [testStr1]
lea rdi, [testStr2]
lea rcx, [5]
xor rax, rax
loopA:
mov dl,byte ptr [rsi] ;dl = rsi第一个字节
xor dl,byte ptr [rdi] ;dl = rsi第一个字节 ^ rdi第一个字节
inc rsi ;rsi向后移动一字节
inc rdi ;rdi向后移动一字节
or al,dl ;al = al | dl
loop loopA ;循环完输入数据长度
ret
main ENDP
END