Мне нужно написать код сборки пикселизации ТОЛЬКО с использованием% rax,% rbx,% rcx,% rdx,% rsi и% rdi (также% rsp и% rbp)
Итак, я сначала написал код на C и изменил любые другие регистры на 64-битные регистры, но в точке ниже, когда я изменяю регистр, это дает Сегментацию по умолчанию
код C:
*temp = b;
*(temp + 1) = g;
*(temp + 2) = r;
Код сборки По gcc:
movq -48(%rbp), %rax
movl %eax, %edx
movq -16(%rbp), %rax
movb %dl, (%rax)
movq -16(%rbp), %rax
addq $1, %rax
movq -56(%rbp), %rdx
movb %dl, (%rax)
movq -16(%rbp), %rax
addq $2, %rax
movq -64(%rbp), %rdx
movb %dl, (%rax)
Изменен% dl на% rdx:
movq -16(%rbp), %rax
movq -48(%rbp), %rdx
movzbq (%rdx), %rbx
movq %rbx, (%rax)
movq -16(%rbp), %rax
addq $1, %rax
movq -56(%rbp), %rdx
movzbq (%rdx), %rbx
movq %rbx, (%rax)
movq -16(%rbp), %rax
addq $2, %rax
movq -64(%rbp), %rdx
movzbq (%rdx), %rbx
movq %rbx, (%rax)