YASM:指令 movsx 拒绝操作数大小的双字?

YASM: Instruction movsx refuses dword for operand size?

我正在编写的汇编程序无法使用 y 汇编器编译,引用:

error: invalid size for operand 2

在下一行:

movsx rbx, dword [rsi+4*rcx]    ; Copy double-word and sign extend.

但是,我找不到 dword 不工作的任何原因。我想将地址 rsi+4*rcx 处的 double-word (4 字节)移动到 8 字节寄存器 rbx 中。所以在将它复制到有效的 ebx 之后,还有 32 位是 "padded"。如果我将大小更改为 byte,我不会收到任何错误。但这不是我想要的。

有一个标题相似的问题。但是,张贴者忘记包含任何大小的操作数,问题的答案并没有解决我的问题。

编辑:我在下面添加了完整的程序,以防我在这里复制的特定语法不是罪魁祸首。

    segment .data

a:
    dd  1
    dd  3
    dd  0
    dd  1
    dd  7
    dd  9
    dd  5
    dd  2
b:
    dd  8
    dd  3
    dd  3
    dd  9
    dd  6
    dd  4
    dd  1
    dd  1

p   dq  0

    segment .text
    global main

main:
    xor rax, rax                    ; Set sum to 0.
    xor rcx, rcx                    ; Set counter to 0.
    lea rsi, [a]                    ; Set source 1.
    lea rdi, [b]                    ; Set source 2.

dot:
    movsx rbx, dword [rsi+4*rcx]    ; Copy in double-word.
    movsx rdx, dword [rdi+4*rcx]    ; Copy in other double-word.        
    imul rbx, rdx                   ; Multiply the two double-words.
    add rax, rbx                    ; Sum product so far.
    inc rcx
    cmp rcx, 8
    jz done
    jmp dot

done:
    mov [p], rax

    xor rax, rax
    ret

由于某种原因,汇编程序调用了所需的指令movsxd

movsxd rbx, dword [rsi+4*rcx]

这应该有效。