第一编:汇编基础

前言:

有时,我们跟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.o  hello.asm
//链接
ld hello.o -o hello 
第一编:汇编基础_第1张图片
运行示意图

语法简单解析

hello world

db 是汇编语言中的关键字,代表“定义字节(define bytes)”,类似与C/C++中的字符串序列,它意味着我们将定义一些原始字节数据插入到我们的代码中。

"Hello World",10:这是我们定义的数据字节,文本字符串中的每个字符都是单个字节。“10”是换行符,就是C/C++中的'\ n'字符。

"text":这是一个分配给内存中地址的名称,该名字保存着一个指向字符串序列的内存地址。这类似于C中的指针变量。每当我们在代码中使用“text”时,编译代码时,编译器将检测该数据在内存中的实际位置并替换所有未来 带有该内存地址的“text”实例.

备注:由于我们在汇编语言中无法像C/C++直接使用'\n',所以使用ascii的字符值10表示

你可能感兴趣的:(第一编:汇编基础)