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]
这应该有效。
我正在编写的汇编程序无法使用 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]
这应该有效。