memset movq给出段错误

问题描述 投票:1回答:1

我已经在gdb上呆了几个小时。我在movq(%rsi,%rcx)行出现段错误。我知道您不能执行mem-> mem mov,所以我通过一个临时寄存器来完成它。 (%rsi),%r​​cx,然后在循环%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 $0, %rdx         #see if num has reached 0
    je .end
    cmpb $0, (%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
c assembly gas memset
1个回答
0
投票

我认为

cmp $ 0,(%rdx)

不是比较寄存器,而是比较它所指向的位置。似乎%rdx用作计数器,因此您应该比较寄存器本身。

© www.soinside.com 2019 - 2024. All rights reserved.