将两个char减去rax

时间:2016-03-27 14:41:15

标签: assembly nasm x86-64

当我这样做时:

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]?

1 个答案:

答案 0 :(得分:3)

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

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

最简单的解决方案是:

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

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

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