Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么';asm是否等同于将字符串中的字符替换为另一个字符串中的字符?_Assembly_Nasm_X86 64 - Fatal编程技术网

Assembly 什么';asm是否等同于将字符串中的字符替换为另一个字符串中的字符?

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

我试图编写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[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集合参考手册”详细说明了每条指令允许的每种编码。(例如,即时操作数、内存源、内存目标等的哪些组合是可编码的。)