1

我正在尝试手动调整一段代码(最初用 C++ 编写的函数)并且汇编程序抛出此错误:错误 A2022:指令操作数必须相同大小

在使用“movq”指令的行。

编码:

.686P       
.mmx          
.xmm           
.MODEL flat, stdcall
.STACK 4096

.data
packedbytes db 10, 20, -30, 40, 50, 60, -70, 80
packedwords dw 10, 20, 30, 40
packeddwords dd 10, 20

.code
main PROC 

    movq mm0, packedbytes   ; <== error thrown here
    movq mm1, packedwords   ; <== here
    movq mm2, packeddwords  ; <== and here

    mov a0, 04d
    mov al, 0d  
    int 21h     
main ENDP
END main

我在 32 位盒子上使用 masm。

4

1 回答 1

0

我已经想通了。您不能直接使用寄存器;您只能通过指针放置数据(至少使用 masm)。

    mov edx, offset packedbytes
    movq mm0, [edx] 
    mov edx, offset packedwords
    movq mm1, [edx]
    mov edx, offset packeddwords   
    movq mm2, [edx] 

这应该可以解决问题。

于 2013-01-03T14:30:01.400 回答