Assembly GAS,MOVQ在尝试将rax复制到mmx寄存器时引发操作数不匹配
我正在使用gnu汇编和gcc编译器。 我必须使用mmx寄存器进行一些操作。 我有一个字节的内存缓冲区,我从内存中读取1个字节到%al,进行逻辑“与”运算,将rax左移1个字节,然后从内存中插入下一个字节的低位,直到%rax满为止。然后当我试着去做的时候:Assembly GAS,MOVQ在尝试将rax复制到mmx寄存器时引发操作数不匹配,assembly,gnu,mmx,Assembly,Gnu,Mmx,我正在使用gnu汇编和gcc编译器。 我必须使用mmx寄存器进行一些操作。 我有一个字节的内存缓冲区,我从内存中读取1个字节到%al,进行逻辑“与”运算,将rax左移1个字节,然后从内存中插入下一个字节的低位,直到%rax满为止。然后当我试着去做的时候: movq %rax, %mm0 编译器抛出:错误:“movq”的操作数类型不匹配 示例: 这项工作: mov $0, %rcx\n" movl , %ecx\n" mov (%1, %rcx, 8), %rbx\n"
movq %rax, %mm0
编译器抛出:错误:“movq”的操作数类型不匹配
示例:
这项工作:
mov $0, %rcx\n"
movl , %ecx\n"
mov (%1, %rcx, 8), %rbx\n"
movq %rbx, %mm0
这不会:
mov (variable_that_contains_address, %rcx, 4), %rax ;get 4 bits from memory
movb %al, %bl
andb $0b00011111, %bl ;only lower 5 bits needed
movb %bl, %dl ;store whole byte at rdx
shl $8, %rdx ;make space for next byte
shr $5, %rax ; I need next 5 bits, because data in memory are saved not in bytes
movb %al, %bl ;next 5 bits
;repating until rdx is full (some higher bits unused)
movq %rdx, %mm0 ; and now compiler throws mismatch error
此代码不是完整代码-完整代码很长。这是为了你的直觉
为什么它这么恨我?我做错了什么。
请不要抱怨获取这5位的方法,我只需要帮助将rdx存储到mm0中
movq %rbx, %mm0
试一试movd
不要忘记,如果你只需要5位,你可以使用1字节的进位标志
shr $5, %rax 10111
将设置进位
shr $5, %rax 01110
将不会如何按您的意思使用此标志?谢谢,这是一个很好的选择。我试过移动,试过推堆栈。仍然不匹配。。。