文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3. Hello, World!
源码通常分成多个段(section)。标签(label)用于标示内存地址,区分大小写。注释(comment)以分号开始,持续到行尾。
除直接映射机器代码的命令外,还有语言定义的伪指令。伪指令(Pseudo Instruction)面向编译器,告知如何工作。
; hello.s global _start section .data hello : db `hello, world!\n` section .text _start: mov rax, 1 ; system call number should be stored in rax mov rdi, 1 ; argument #1 in rdi: where to write (descriptor)? mov rsi, hello ; argument #2 in rsi: where does the string start? mov rdx, 14 ; argument #3 in rdx: how many bytes to write? syscall ; this instruction invokes a system call mov rax, 60 ; 'exit' syscall number xor rdi, rdi ; syscall
$ nasm -g -F dwarf -f elf64 -o hello.o hello.s $ ld -o test hello.o
# makefile .PHONY: build clean build: @nasm -g -F dwarf -f elf64 -o hello.o hello.s @ld -o hello hello.o clean: -@rm -rf test hello a.out -@rm -rf *.o *.i *.a *.so
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论