如何仅使用64位寄存器将1字节值存储在64位寄存器中?

时间:2018-11-18 14:11:35

标签: assembly x86-64

我只需要使用%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)

1 个答案:

答案 0 :(得分:1)

我认为您想做类似的事情:

args.first

您应该只能使用64位regs编写此文件。您还应该能够找到很多方法来使这种方法变小。