将两个字符减去 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
当我这样做时:
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