我正在编写的汇编程序将不会使用y汇编器进行编译,理由是:
error: invalid size for operand 2
在下一行:
movsx rbx, dword [rsi+4*rcx] ; Copy double-word and sign extend.
但是,我找不到dword
不起作用的任何原因。我想将地址rsi+4*rcx
的双字(4个字节)移到8字节寄存器rbx
中。因此,在将其复制到有效的ebx
中之后,仍有32位需要“填充”。如果将大小更改为byte
,则不会出错。但这不是我想要的。
有一个标题类似here的问题。但是,发布者忘记了包含任何大小的操作数,并且对该问题的答案并不能解决我的问题。
编辑:如果在这里复制的特定语法不是罪魁祸首,我将在下面添加完整的程序。
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
答案 0 :(得分:3)
出于某种原因,汇编器调用所需的指令movsxd
movsxd rbx, dword [rsi+4*rcx]
这应该有效。