我已经决定为了好玩而学习汇编语言。我已经用C语言编程多年了。
我遵循一些在线教程打印“Hello world”并在NASM手册中寻找了一些资料,这一切都很好。所以,我设定了一个任务:循环打印“hello world”。我知道我可以使用
然而,显然我误解了变量赋值在汇编中的工作原理,因为我得到了错误信息:
我遵循一些在线教程打印“Hello world”并在NASM手册中寻找了一些资料,这一切都很好。所以,我设定了一个任务:循环打印“hello world”。我知道我可以使用
loop
操作码来完成这个任务,但是希望能够显式编写并使用在.bss
部分定义的变量。然而,显然我误解了变量赋值在汇编中的工作原理,因为我得到了错误信息:
nasm -felf -o hello.o hello.asm
hello.asm:16: error: invalid combination of opcode and operands
hello.asm:17: error: invalid combination of opcode and operands
hello.asm:28: error: invalid combination of opcode and operands
我尝试在网上搜索有关变量赋值的信息,包括NASM手册,但似乎找不到我需要的信息。有人可以帮助吗?这是我的(简单!)代码:
; print "Hello world!" to the screen multiple times
section .data
msg: db 'Hello world!', 10
msglen: equ $ - msg
section .bss
iter: resb 1
section .text
global _start
_start:
; loop 10 times
mov iter, 0 ; initalise loop counter
FL: cmp iter, 10 ; is iter == 10?
jge LoopEnd
; write the message to STDOUT:
mov eax,4 ; code for write syscall
mov ebx,1 ; stdout fd
mov ecx,msg ; message to print...
mov edx,msglen ; ...and it's length
int 80h ; kernel interrupt
; increment loop iterator
inc iter
jp FL
LoopEnd:
; now exit, with return code 0:
mov eax,1
mov ebx,0
int 80h