当我这样做时:
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]?
答案 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