第一编:汇编基础
前言:
有时,我们跟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表示
推荐阅读
- 开学第一天(下)
- 我要我们在一起(二)
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- (二)ES6第一节变量(let|(二)ES6第一节变量(let,const)
- 新年第一部电影,一本满足
- 二十年后的家乡
- 喵喵
- 从我的第一张健身卡谈传统健身房
- 也许第一步很难,但跨过去就好了
- 请叫我冉责编