我只需要使用%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)
答案 0 :(得分:1)
我认为您想做类似的事情:
args.first
您应该只能使用64位regs编写此文件。您还应该能够找到很多方法来使这种方法变小。