将两个字符减去 rax

Subtract of two char into rax

当我这样做时:

endnf:
    add al, BYTE[rdi]
    sub al, BYTE[rsi]
    jmp end

当 BYTE[rdi] = 116 且 BYTE[rsi] = 122 时,结果为 250 而不是 -6,因为 al = sizeof(char)

所以我尝试了 :

endnf:
    add rax, BYTE[rdi]
    sub rax, BYTE[rdi]
    jmp end

但我不工作:

nasm -f elf64 strcmp.s                            16:31:07
strcmp.s:24: error: invalid combination of opcode and operands

rdi[0]和rsi[0]相减怎么办?

错误源于您应该编写 ... rax, qword ptr [...] 以具有匹配大小的操作数。

我不明白你为什么要写一个 add 指令来获取 [rdi] 的值。

最简单的解决方案是:

mov   al, [rdi]
sub   al, [rsi]
movsx rax, al

如果你写下一行,你会得到相同的结果。这很愚蠢,但它确实在 AL 中留下了与以前相同的结果,可以扩展它以满足您的需要。

mov   rax, [rdi]
sub   rax, [rsi]
movsx rax, al