运行第一个汇编程序

2023-10-30 18:13:53 浏览数 (2)

前面我们了解了计算机底层的一些知识,比如计算机体系机构、操作系统、数据库、以及网络的基础知识,今天我们来研究一下计算机底层的语言,相信有了基础知识的铺垫,对于后期的编程学习会有莫大的帮助。

什么是计算机的底层语言

计算机底层语言是指直接在计算机硬件上运行的一类程序语言,主要有机器语言和汇编语言。

  1. 机器语言:机器语言是一种直接由计算机硬件执行的语言,它由二进制代码组成,是计算机硬件能够识别和执行的唯一语言。机器语言的编写非常繁琐,容易出错,因此在实际开发中很少使用。
  2. 汇编语言:汇编语言是一种用助记符表示的机器语言,比机器语言更易读写。每一种汇编语言都有其对应的机器指令集,通过汇编器将汇编代码转换成机器语言,再由计算机执行。汇编语言具有直接访问计算机硬件的能力,可以用于系统底层的程序开发。

计算机底层语言具有直接操作计算机硬件的能力,因此在开发操作系统、编写驱动程序、进行系统优化和调试等方面有重要应用。同时,了解底层语言有助于理解程序的实现和性能优化,可以提高程序开发的效率和质量。

机器语言和汇编语言之间的几个主要区别:

区别

机器语言

汇编语言

表示方式

二进制代码

文本代码

可读性

人类难以理解

相对易读

抽象程度

最低

中等

代码长度

最短

较长

编写难度

最高

较低

直接执行

能够直接在CPU上执行

需要经过汇编器转化为机器语言

机器语言

是计算机可以直接理解和执行的二进制指令,是计算机能够理解和执行的最底层语言。它通常由一串二进制代码组成,包括操作码和操作数,用于指示计算机进行各种操作,例如读写内存或处理数据。

机器码计算机是可以理解的,但对于人来说还是想当有难度,下面就主要研究下汇编语言。

汇编语言

汇编语言具有直接操作计算机硬件的能力,因此在开发操作系统、编写驱动程序、进行系统优化和调试等方面有重要应用。同时,汇编语言还能够深入理解计算机底层的工作原理,提高编程水平和代码质量。但是汇编语言编写的程序难以维护和移植,因此在现代实际开发中还是较少使用。

汇编语言主要由以下几部分组成:

  1. 指令:汇编语言的指令是用助记符表示的机器指令,它们能够直接操作计算机的硬件资源。指令一般包括操作码和操作数两部分,操作码表示指令的类型,操作数则表示需要进行操作的数据。
  2. 伪指令:伪指令是一些在汇编程序中使用的特殊指令,它们不是机器指令,而是用来帮助程序员描述程序结构的。伪指令一般用于定义常量、变量、程序入口点等。
  3. 注释:注释用于解释程序的功能和操作,它们对汇编程序的执行没有任何影响,但对于程序员和其他人来说,注释可以帮助他们更好地理解和维护程序。
  4. 数据定义:数据定义用于定义程序中的数据类型和变量,以及它们的初值。数据定义包括数据类型、变量名和初值等内容。

直接举个hello world的例子

代码语言:javascript复制
section .data
    msg db 'Hello, world!', 0

section .text
    global _start

_start:
    ; write the message to stdout
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov edx, 13
    int 0x80

    ; exit with status 0
    mov eax, 1
    xor ebx, ebx
    int 0x80

怎么编译

汇编语言文件通常使用特定的扩展名(如.asm、.s等)进行命名,可以使用文本编辑器创建和编辑。下面以Linux系统为例,介绍如何编写、编译和运行汇编语言文件:

编写汇编语言程序

使用文本编辑器创建一个汇编语言文件,例如hello.asm,编写汇编程序代码。代码格式参考hello world的示例。

汇编语言文件编译

使用汇编语言编译器将汇编语言程序编译成可执行文件。常用的汇编语言编译器有nasm、gas等,具体使用哪个汇编语言编译器可以根据具体情况决定。

在centos7 上运行汇编程序

在CentOS 7上运行汇编程序,需要先安装相应的汇编器和链接器,例如GNU Assembler (GAS)和GNU Linker (LD)。

可以通过以下命令安装:

代码语言:javascript复制
sudo yum install nasm ld
安装完成后,可以使用文本编辑器编写汇编程序,例如使用vim编辑器:
vim hello.asm
参考上面例子
保存文件后,可以使用以下命令编译和链接程序:
nasm -f elf64 -o hello.o hello.asm 
ld -s -o hello hello.o
编译和链接成功后,可以使用以下命令运行程序:
./hello

如果一切顺利,应该能看到程序输出Hello, world

推荐书籍:

《汇编语言程序设计》(第3版)作者:王爱英

这是一本经典的汇编语言实践教材,以8086微处理器为基础,全面讲解汇编语言的基本概念、指令集、程序设计等内容,并提供了大量的实例代码和练习题。

《汇编语言入门》作者:张凯

这是一本比较通俗易懂的汇编语言入门教材,采用图文并茂的方式,从汇编语言的基本概念、指令集、程序设计等方面介绍汇编语言,适合初学者入门学习。

《汇编语言程序设计与接口技术》(第2版)作者:高清愿

这是一本比较全面的汇编语言教材,除了介绍汇编语言的基本概念、指令集、程序设计等内容外,还涉及了计算机体系结构、接口技术等方面的内容,适合深入学习汇编语言的读者参考。

《Assembly Language for x86 Processors"》by Kip R. Irvine: 这是一本非常受欢迎的汇编语言教材,主要讲解基于x86架构的汇编语言编程,包括32位和64位的编程技术。

《Professional Assembly Language》by Richard Blum: 这本书适合有一定编程基础的读者,深入介绍了x86汇编语言的高级概念和技术,包括数据类型、数组、指针等等。

《The Art of Assembly Language》by Randall Hyde: 这是一本综合性很强的汇编语言书籍,不仅讲解了x86架构下的汇编语言编程,还涵盖了其他体系结构下的汇编语言编程,包括ARM、MIPS、PowerPC等。

感兴趣的同学可以后台回复汇编,获取相关的学习资料,别忘了点赞关注呀。

END

0 人点赞