比较不带多cmp的5-BYTE并使用测试

问题描述 投票:0回答:1

我打包了'HELLO WO',结果是一个8字节的整数(5717073776924706120),这些位是:

0100111101010111001000000100111101001100010011000100010101001000

现在我要检查此整数的前5个字符是否等于'HELLO'!我知道的第一种方法是比较第一个4-BYTE,然后移位(或旋转)4-BYTE,然后比较第五个字节!!!像这样的东西

mov rax, 5717073776924706120

cmp eax, 1280066888  ; first 4-BYTE
jne ....
ror rax, 32
cmp al, 'O' ; check the fifth character
jne ...
; done here

但是我认为有一种更好的方法来检查整个第一个5-BYTE,而无需将比较过程分为2个过程!!!所以我决定使用'test'指令,所以我需要第一个5-BYTE的位是

0000000000000000000000000100111101001100010011000100010101001000

然后我这样做:

mov rax, 5717073776924706120
mov rbx, 340582483272          ; 0000000000000000000000000100111101001100010011000100010101001000

test rax, rbx
; here what  should i do next ???? how should i handle the result !?
assembly x86-64 bit micro-optimization
1个回答
0
投票
mov rax, 5717073776924706120
mov rbx, 340582483272
mov rcx, rax
mov rdx, rbx
mov r8, 5
call memcmp
test al, al
jnz equals
© www.soinside.com 2019 - 2024. All rights reserved.