首页 > 编程语言 >《程序是怎样跑起来的》——第10章 通过汇编语言了解程序的实际构成

《程序是怎样跑起来的》——第10章 通过汇编语言了解程序的实际构成

时间:2024-02-23 19:34:46浏览次数:29  
标签:10 汇编语言 代码 程序 本地 寄存器 源代码 CPU

一、汇编语言和本地代码
1、汇编语言和本地代码的关系:汇编语言和本地代码是一 一对应的关系。计算机CPU能直接解释运行只有本地代码(机器语言)程序。用C语言等编写的源代码,需要通过各自的编译器编译后,转换成本地代码。通过调查本地代码的内容,可以了解程序最终是以何种形式来运行的。
2、汇编语言:在各本地代码中,附带上表示其功能的英语单词缩写。这些缩写称为助记符,使用助记符的编程语言称为汇编语言。这样,通过查看汇编语言编写的源代码,就可以了解程序的本质了。
3、汇编器:即使是用汇编语言编写的源代码,最终也必须要转换成本地代码才能运行。负责转换工作的程序称为汇编器,转换这一处理本身称为汇编。在将源代码转换成本地代码这个功能方面,汇编器和编译器是同样的。
4、汇编程序:用汇编语言编写的源代码,和本地代码是一一对应的。因而,本地代码也可以反过来转换成汇编语言的源代码。持有该功能的逆变换程序称为反汇编程序,逆变换这一处理本身称为反汇编。
示例:汇编语言的源代码和本地代码是一一对应的

二、通过编译器输出汇编语言的源代码
1、除了将本地代码进行反汇编这一方法外,通过其他方式也可以获取汇编语言的源代码。大部分C语言编译器,都可以把利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。利用该功能,就可以对C语言的源代码和汇编语言的源代码进行比较研究。
2、(1)通过解析可执行文件得到源代码的方式称为“反汇编”或“反编译”,也称为“反向工程”。市场上销售的软件程序等,有时会在其使用说明书中明确表明禁止反汇编及反编译
(2)AddNum函数仅仅返回两个参数值的相加结果。在实际的编程中,这种函数是不需要的。为了说明函数调用的机制,这里特意使用了这种简单的函数。
(3)在命今提示符上运行的程序中,main函数位于程序运行起始位置。而在Windows上运行的程序中,WinMain函数位于程序运行起始位置。程序运行起始位置也称为“入口点”。
三、汇编语言的语法
1、概念:汇编语言指令的语法结构是操作码+操作数(也存在只有操作码没有操作数的指令)。
2、操作码和操作数:操作码表示的是指令动作,操作数表示的是指令对象。能够使用何种形式的操作码,是由 CPU 的种类决定的。操作数中指定了寄存器名、内存地址、常数等。
3、操作码的功能:

在汇编语言中,类似于mov这样的指令称为“操作码”(opcode),作为指令对象的内存地址及寄存器称为“操作数”(operand)。被转换成CPU可以直接解析运行的二进制的操作码和操作数,就是本地代码。
4、CPU和内存的关系:

本地代码加载到内存后才能运行。内存中存储着构成本地代码的指令和数据。程序运行时,CPU会从内存中把指令和数据读出,然后再将其存储在CPU内部的寄存器中进行处理。
5、x86系列CPU的主要寄存器:

寄存器是CPU中的存储区域。不过,寄存器并不仅仅具有存储指令和数据的功能,也有运算功能。寄存器的名称会通过汇编语言的源代码指定给操作数。内存中的存储区域是用地址编号来区分的。CPU内的寄存器是用eax及ebx 这些名称来区分的。此外,CPU内部也有程序员无法直接操作的寄存器。
四、函数
1、函数调用机制:在函数的入口处把寄存器ebp的值入栈保存,在函数的出口处出栈,这是C语言编译器的规定。这样做是为了确保函数调用前后cbp寄存器的值不发生变化。
示例:
(1)函数调用的汇编语言代码

(2)AddNum 函数调用前后栈的状态变化

2、函数内部的处理

AddNum函数内部的栈状态变化:

标签:10,汇编语言,代码,程序,本地,寄存器,源代码,CPU
From: https://www.cnblogs.com/Li204217/p/18030248

相关文章

  • 操作系统于应用程序的关系
    大家在计算机上运行程序大多是为了提高工作效率。而对于作为应用程序运行环境的操作系统,人们则是直接使用市场上成型的参评。但是,我们不能忽略操作系统的情况下编写应用程序。很久之前,操作系统还不存在,程序员需要从零开始编写能够完成各种操作的程序。这实在太麻烦了。于是,有人开......
  • 第七章 程序是在怎样的环境下运行
    第七章“程序是在怎样的环境下运行”深入探讨了程序运行所需的环境。通过本章内容,可以总结以下几点关键信息:1.运行环境:运行环境=操作系统+硬件。程序的运行环境是通过操作系统和硬件(处理器、内存)等来表示的,也就是说,操作系统和硬件决定了程序的运行环境。2.Windows销除了CPU之外......
  • 《程序员修炼之道》读后感
    《程序员修炼之道》是由AndrewHunt和DavidThomas合著的一本经典软件开发指南。以下是对这本书的读后感:思维方式的转变:《程序员修炼之道》强调了软件开发中的思维方式和态度的重要性。书中提到的许多概念,如不断学习、持续改进、专注于质量等,对我产生了深远的影响。它教会了我如何......
  • 通过汇编语言了解程序的实际构成
          1、会编语言的元代码转换成本地代码的方式称为汇编2、本地代码转换成汇编语言的源代码的方式称为反汇编    本地代码的指令中表示其功能的英文缩写称为助记符,而使用助记符的编程语言称为会编语言,通过查看会编语言编写的源代码就可以了解程序的本质。负责......
  • 《程序是怎么跑起来的》第5章读书笔记
    第4张介绍了内存那么第5张就是磁盘。在开篇告诉了我们内存只主存而磁盘主要指硬盘。计算机中的储存器包括内存和磁盘储存在磁盘中的程序需要先加载到内存才能运行,不能在磁盘上直接运行。内存与磁盘的联系是非常密切的。第1个体现是磁盘缓存。磁盘缓存是一块内存空间,用于临时存放从......
  • 《程序是怎样跑起来的》——第9章 操作系统和应用的关系
    一、操作系统功能的历史1、在计算机中尚不存在操作系统的年代,完全没有任何程序,因此程序员就需要编写出处理相关的所有程序。用机器语言编写程序,然后再使用开关将程序输人,这一过程非常麻烦。于是,有人开发出了仅具有加载和运行功能的监控程序,这就是操作系统的原型。(操作系统(Operat......
  • vs2010 快捷键 注释
        3.写代码时经常要注释一些代码,测试,然后再取消注释,反复如此,可以记住这两个快捷键,按Ctrl+K,Ctrl+C注释代码,按Ctrl+K,Ctrl+U取消注释。可以在开发中不用将手在键盘和鼠标间移来移去,是一件多么惬意的事啊。这时候还可以配合Shift+上下键头,可以选择多行。就此告别用鼠标选......
  • 《程序是怎样跑起来的》通过汇编语言认识程序的真面目
    汇编语言作为一种低级语言,与机器语言非常接近,它直接对应于计算机的指令集。通过阅读这一章,我了解到汇编语言中的指令是如何直接操作计算机的各个部件,如CPU、内存、输入输出设备等。这让我更加深刻地认识到,高级语言编写的程序最终都需要被转换为汇编语言或机器语言才能在计算机上运......
  • 《程序是怎么跑起来的》第4章读书笔记
    计算机是处理数据的机器,而处理对象的数据储存在内存和磁盘中。内存本质上是一种名为内存芯片的装置,内存芯片分为ram,rom等不同类型,但从外部来看,它们的基本原理是相同的内存芯片外部有引脚负责连接电源以及输入地址信号等等。内存芯片内部有很多能储存巴比特数据的容器,只要指定容器......
  • 程序是怎么跑起来的第七章
    操作系统和硬件决定了程序的运行环境,同一类型的硬件可以选择安装多宗操作,从程序运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数系统,CPU只能解释其自身固有的机器语言。不同的CPU能解释得机器语言的种类也不同。机器语言的程序称为本地代码。文本文件在任何环境下都能显示......