将 char 从字符串替换为另一个字符串的 char 的 asm 等价物是什么?
What's the asm equivalent of replacing a char from a string to a char of another string?
我正在尝试编写 strcat 代码来学习汇编。我使用 64 位汇编和 Intel 语法在 mac osx 和 nasm 上编码。
到目前为止,这是我的结果:
section .text
global _ft_strcat
_ft_strcat:
mov rax, rdi
mov rbx, rsi
loop_s1:
cmp byte[rax], 0
jz copy_str
inc rax
jmp loop_s1
copy_str:
cmp byte[rbx], 0
jz end
mov byte[rax], byte[rbx]
inc rax
inc rbx
jmp copy_str
end:
mov byte[rax], 0
ret
行 mov byte[rax], byte[rbx]
给我这个编译错误:
ft_strcat.s:17: error: invalid combination of opcode and operands
很难获得关于汇编的有用信息,因为有太多不同的语法。
没有mov
需要2个内存操作数。参见instruction set reference。可以遍历一个字节大小的寄存器,例如:
mov dl, [rax]
mov [rbx], dl
另请注意,调用约定要求保留一些寄存器,包括 rbx
。您可以改用 rcx
,或者 save/restore。
我正在尝试编写 strcat 代码来学习汇编。我使用 64 位汇编和 Intel 语法在 mac osx 和 nasm 上编码。 到目前为止,这是我的结果:
section .text
global _ft_strcat
_ft_strcat:
mov rax, rdi
mov rbx, rsi
loop_s1:
cmp byte[rax], 0
jz copy_str
inc rax
jmp loop_s1
copy_str:
cmp byte[rbx], 0
jz end
mov byte[rax], byte[rbx]
inc rax
inc rbx
jmp copy_str
end:
mov byte[rax], 0
ret
行 mov byte[rax], byte[rbx]
给我这个编译错误:
ft_strcat.s:17: error: invalid combination of opcode and operands
很难获得关于汇编的有用信息,因为有太多不同的语法。
没有mov
需要2个内存操作数。参见instruction set reference。可以遍历一个字节大小的寄存器,例如:
mov dl, [rax]
mov [rbx], dl
另请注意,调用约定要求保留一些寄存器,包括 rbx
。您可以改用 rcx
,或者 save/restore。