Assembly 什么';asm是否等同于将字符串中的字符替换为另一个字符串中的字符?
我试图编写strcat来学习汇编。我在MacOSX上使用nasm编写代码,使用64位汇编,使用Intel语法。 以下是我目前的结果:Assembly 什么';asm是否等同于将字符串中的字符替换为另一个字符串中的字符?,assembly,nasm,x86-64,Assembly,Nasm,X86 64,我试图编写strcat来学习汇编。我在MacOSX上使用nasm编写代码,使用64位汇编,使用Intel语法。 以下是我目前的结果: 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[r
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
很难获得关于汇编的好信息,因为有太多不同的语法。没有需要2个内存操作数的
mov
。看。您可以查看字节大小的寄存器,例如:
mov dl, [rax]
mov [rbx], dl
还要注意,调用约定要求保留一些寄存器,包括
rbx
。您可以使用rcx
,或者保存/还原它。没有需要2个内存操作数的mov
。看。您可以查看字节大小的寄存器,例如:
mov dl, [rax]
mov [rbx], dl
还要注意,调用约定要求保留一些寄存器,包括
rbx
。您可以改用rcx
,或者保存/还原它。找到一个操作码列表,详细列出所有允许(和不允许)的参数可能会有所帮助。也许这会有帮助。找到详细说明所有允许(和不允许)参数的操作码列表可能会有所帮助。也许这会有帮助。有一些到资源的链接。“英特尔insn集合参考手册”详细说明了每条指令允许的每种编码。(例如,即时操作数、内存源、内存目标等的哪些组合是可编码的。)有一些到资源的链接。“英特尔insn集合参考手册”详细说明了每条指令允许的每种编码。(例如,即时操作数、内存源、内存目标等的哪些组合是可编码的。)