第一编:汇编基础

前言: 有时,我们跟Unix/Linux打交道,难免会碰到汇编语言写的的源文件,特别是很多时候C/C++编译器 解析出来的汇编源文件看不懂就一脸懵逼了。于是笔者对常用的命令过一遍。本系列随笔不会深入探讨汇编语言。只是简易介绍一些汇编语言中可能碰到的常用的命令和概念。
【第一编:汇编基础】Unix/Linux天然集成了汇编语言的编译器nasm,笔者写这遍随笔时用的机器ubuntu x86_64
以下是以一个典型的Hello World程序开遍,在unix/linux使用你最喜欢的编辑器敲入以下代码

/*hello.asm*/ section .data text db "Hello World",10 section .text global _start _start: mov rax,1 mov rdi,1 mov rsi,text mov rdx,14 syscall mov rax,60 mov rdi,0 syscall

编译和连接
/*elf64代表这个是一个64位的汇编程序*/ //编译 nasm -f elf64-o hello.ohello.asm //链接 ld hello.o -o hello

第一编:汇编基础
文章图片
运行示意图 语法简单解析 第一编:汇编基础
文章图片
hello world db 是汇编语言中的关键字,代表“定义字节(define bytes)”,类似与C/C++中的字符串序列,它意味着我们将定义一些原始字节数据插入到我们的代码中。
"Hello World",10:这是我们定义的数据字节,文本字符串中的每个字符都是单个字节。“10”是换行符,就是C/C++中的'\ n'字符。
"text":这是一个分配给内存中地址的名称,该名字保存着一个指向字符串序列的内存地址。这类似于C中的指针变量。每当我们在代码中使用“text”时,编译代码时,编译器将检测该数据在内存中的实际位置并替换所有未来 带有该内存地址的“text”实例.
备注:由于我们在汇编语言中无法像C/C++直接使用'\n',所以使用ascii的字符值10表示

    推荐阅读