memset movq 给出段错误

memset movq giving segfault

我在 movq (%rsi, %rcx) 行遇到段错误。

我知道你不能做 mem->mem mov,所以我通过一个临时寄存器来做。 (%rsi), %rcx, 然后在循环 %rcx, (%rdi) 中。这是我的代码:

experimentMemset:   #memset(void *ptr, int value, size_t num)

                                 #%rdi     #%rsi        #%rdx


movq %rdi, %rax             #sets rax to the first pointer, to return later


.loop:
    cmp [=10=], (%rdx)          #see if num has reached 0
    je .end
    cmpb [=10=], (%rdi)         #see if string has ended also
    je .end

    movq %rsi, %rdi       #copies value into rdi

    inc %rdi        #increments pointer to traverse string
    dec %rdx        #decrements the count, aka num
    jmp .loop



.end:
     ret

如您所见,RDX 保存的是大小(整数计数),而不是指针。它是按值传递的,而不是按引用传递的。

cmp [=10=], (%rdx)

比较的不是寄存器,而是寄存器指向的位置。好像%rdx是作为一个计数器使用的,所以你应该比较寄存器本身。

test %rdx,%rdx; je count_was_zero

还有其他错误,例如检查只写目标的内容是否为零,以及没有将 %sil 存储到 (%rdi) 中。但这是当前版本问题中出现段错误的原因。