我尝试运行此代码并打印结果,但由于某种原因,我收到以下错误消息:
main.asm:10: error: invalid operands in non-64-bit mode
main.asm:11: error: invalid operands in non-64-bit mode
main.asm:12: error: invalid operands in non-64-bit mode
main.asm:13: error: invalid operands in non-64-bit mode
ld: cannot find *.o: No such file or directory
这是代码:
global _start
section .data
n DB 10
section .text
_start:
xor ax, ax
mov bx, 1
mov cx, (n)
.L1:
mov r9w, bx #one of the lines that leads to an error
imul r9w, bx #one of the lines that leads to an error
imul r9w, bx #one of the lines that leads to an error
add ax, r9w #one of the lines that leads to an error
inc bx
dec cx
test cx, cx
jne .L1
movq rax, 1
movq rdi, 1
movq rsi, ax
movq rdx, 8
syscall
xor rax, rax
ret
END:
我是一个相当新的组装,不能完全理解问题是什么-BX寄存器是16位,R9 W也是16位...
我使用在线编译器来运行这个(https://www.tutorialspoint.com/compile_assembly_online.php)
1条答案
按热度按时间zd287kbt1#
我发现您的代码存在三个主要问题:
1.您正试图在非64位模式下访问64位寄存器。尽管R9W是R9寄存器的最低部分,但它仍仅为64位模式。
1.您正试图通过执行
ret
指令从 _start 返回。这可能会导致段错误,因为堆栈当前包含指向argc
的指针1.您可能应该使用
mov
指令,而不是movq
指令。