首页 > 编程语言 >《程序是怎样跑起来的》第十章

《程序是怎样跑起来的》第十章

时间:2024-02-29 12:11:06浏览次数:31  
标签:函数 汇编语言 第十章 程序 C语言 指令 寄存器 源代码 怎样

读书笔记:10.1:1.汇编语言是使用助记符来编写程序的。
1.汇编需要使用汇编器来完成
2.通过反汇编可以得到人类能够理解的源代码。
3.汇编语言源文件的扩展名在Windows中主要是.asm,在Linux中主要是.S。
4.在高级编程语言的源代码中,指令和数据都是分散在各个位置的,但在编译后它们会被分别汇总到不同的段中。
5.汇编语言中可以使用跳转指令实现循环和条件分支。
计算机的CPU能够直接解释执行的只有本机代码(机器语言)。用C语言等编写的源代码,需要使用各个编程语言相对应的编译器进行编译,转换成本机代码。
即使是用汇编语言编写的源代码,最终也必须转换成本机代码才能运行。用来完成这种转换的程序称为汇编器,这个转换的过程称为汇编。在将源代码转换成本机代码这一点上,可以说汇编器和编译器的功能是相同的。
用汇编语言编写的源代码和本机代码是-一对应的,因此我们也可以将本机代码反过来转换成汇编语言的源代码。具有这种反向转换功能的程序称为反汇编器这种反向转换的过程称为反汇编.
10.2:用C编译器输出汇编语言源代码
除对本机代码进行反汇编之外我们还可以通过其他方法得到汇编语言源代码。大部分C语言编译器提供了将C语言源代码转换成汇编语言源代码的功能。使用这一功能,我们就可以对C语言源代码和汇编语言源代码进行对比研究了。
10.3:伪指令与注释
相信各位读者之中肯定有人是第一次看到汇编语言源代码。汇编语言看起来似乎很难,但实际上很简单,说汇编语言比C语言还简单一点都不夸张。在详细讲解源代码的内容之前,我们先来了解一下伪指令和注释汇编语言源代码中的指令分为两一种是会被转换成本机代码的一种般指令,另一种是专门针对汇编器的伪指令。伪指令负责告诉汇编器程序的结构和汇编的方法,因此也被称为汇编程序指令。
10.4汇编语言的语法是“操作码操作数”
在汇编语言中,每一行都表示CPU要执行的一个指令。汇编语言指令的语法是“操作码操作数"。
寄存器是CPU内部的存储空间但是寄存器的功能并不仅限于存储指令和数据,寄存器还可以参与运算。
10.5 最常用的movl指令
用于向寄存器和内存存放数据的movl指令可以说是最常用的指令。movl指令有两个操作数,分别表示数据取出和存放的目标位置。操作数可以是数值、标签(命名的地址)、寄存器名,我们也可以在它们的左右两边加上圆括号()来使用。
操作数左右两边没有括号时,表示直接处理这个数值,有括号时表示将括号中的值作为内存地址来解释并对该内存地址进行读写。
10.6 将数据存入栈中
程序在运行时会分配一块名为栈的内存空间。栈的英文stack原本是干草堆的意思,顾名思义,数据在栈中是从下(编号较大的地址)往上(编号较小的地址)堆积起来,然后从上往下取出的。esp寄存器(栈指针寄存器)会记录当前栈顶数据的内存地址。
10.7 函数调用的工作原理
用C语言编写的AddNum函数和MyFunc函数的入口分别用_AddNum:和_MyFunc:标签表示。函数名的前面加下划线(_)是BCC32编译器的规定。标签不是指令,它只用来表示某个位置。当调用函数时,我们就可以指定要调用的函数的入口位置的标签作为call指令的操作数。
执行call指令时,指向call指令的下一条指令的内存地址(也就是函数返回的目标地址)会被自动保存到栈中,esp寄存器的值也会随之更新。
10.9 全局变量和局部变量的工作原理
C语言中的变量分为两种,在函数外部声明的变量称为全局变量,在函数内部声明的变量称为局部变量。全局变量可以在程序的所有函数中访问,而局部变量只能在声明它的函数中访问。
当程序运行时,指令段和数据段会被一起加载到内存中,并在程序运行过程中一直驻留内存,因此程序中所有的函数都可以访问全局变量。
相对地,局部变量则是在调用函数时,由函数的代码临时存入栈中的。
10.10 循环的工作原理
下面我们通过分析汇编语言源代码,看一看C语言中的for循环和if条件分支在计算机内部是如何实现的。在循环和条件分支的实现上,尚未介绍的比较指令和转跳转指令发挥了很大的作用。
10.11条件分支的工作原理
下面我们来研究一下条件分支的工作原理。条件分支也是通过比较指令和跳转指令来实现的。
C语言的条件分支是通过if语句来描述的,程序中调用的两个函数都是空函数。

标签:函数,汇编语言,第十章,程序,C语言,指令,寄存器,源代码,怎样
From: https://www.cnblogs.com/chenkail/p/18043218

相关文章

  • 【C++】Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。
    Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。让Mat输入他朋友的姓名列表。姓名存储在一个容器中,然后按排列后的顺序显示出来。让Pat输入她朋友的姓名列表。姓名存储在另一个容器中,然后按排列后的顺序显示出来。创建第三个容器,将两个列表合并,删除重......
  • uniapp 小程序 request.js 文件书写
    uniapp小程序request.js文件书写:https://blog.csdn.net/weixin_46479579/article/details/124431422?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-16-124431422-blog-132159578.235^v43^pc_blog_bottom_relevance_base9&spm=1001......
  • uniapp开发小程序H5页面顶部导航栏navigationBar如何隐藏?三种解决办法
    uniapp开发小程序H5页面顶部导航栏navigationBar如何隐藏?三种解决办法:https://blog.csdn.net/qq_37860634/article/details/131226906?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170917383916800225594144%2522%252C%2522scm%2522%253A%252220140713.130102334.pc......
  • 微信小程序的配置文件app.json的所有内容(十七)
    微信小程序的配置文件app.json的所有内容  {  "pages":["page1","page2","page3"], //页面路径列表,第一个页面路径为小程序初始页面  "window":{ //小程序窗口设置   //如果不进行额外的配置,小程序页面将使用默认的导航样式。"navigationStyle":"defau......
  • 程序是怎样跑起来的第十二章读后感
    在计算机中,有硬件和软件之分。在学习,我知道主要的硬件有CPU、控制器、运算器、输入设备和输出设备等,在这里,讲到了输入指令和输出指令,它们的英文名为INPUT和OUTPUT,但是计算机可以连接很多外围设备,我们应该了解它们是怎样工作的。首先,我们先看端口,什么是端口?这书中所讲的是寄存器的......
  • .net 应用程序 生成Docker映像时 dotnet restore找不到自定义源的包的问题,ContainerBu
    一、问题:我们在.net应用中生成Docker映像时,会出现ContainerBuildAndLaunch任务意外失败的问题。 查看输出窗口发现,是执行dotnetrestore时,找不到包的问题,因为我的这些包是在自己的私有源上二、解决方案:在Dockerfile文件中,在执行dotnetrestore前一行添加nuget私有源就行......
  • 《程序是怎么跑起来的第十一章》
    《程序是怎样跑起来的》第11章主要涉及以下几个方面的内容:输入输出控制:这部分介绍了计算机中的输入输出控制机制,包括IN指令和OUT指令的使用。IN指令用于从指定端口的设备读取数据,并将其存储在CPU内部的寄存器中;OUT指令则是将CPU寄存器中的数据写入到指定端口的设备中。这些指令......
  • 东南亚主播扎堆,南宁怎样做跨境电商?
    第一个是,国新办举行新闻发布会,回顾《区域全面经济伙伴关系协定》生效两周年成果。第二个是,警茶出圈,成为热点话题。先来看今天的第一条。前不久,国新办举行了新闻发布会,回顾了《区域全面经济伙伴关系协定》生效两周年的成果。《区域全面经济伙伴关系协定》,是由东盟十国发起,中国、日......
  • 《成促使怎样跑起来的》第11,12章观后感
    在这章中,书籍详细介绍了程序在硬件层面上如何运行和控制的相关知识,深入浅出地讲解了现代计算机架构的工作原理和基本概念。通过阅读这一章节,我对程序与硬件之间的关系有了更深入的理解。书中对计算机的硬件架构进行了介绍,包括中央处理器(CPU)、内存、硬盘等不同组成部分。通过对这......
  • 《程序是怎么跑起来的第十章》
    《程序是怎样跑起来的》这本书的第10章主要讲的是程序的运行过程包括以下几个步骤:加载:当程序被启动时,操作系统会将程序的代码和数据从硬盘加载到内存中。初始化:程序在内存中加载完成后,程序的初始化代码会被执行,这通常包括为程序的数据成员分配空间,设置默认值等。执行:程序的主......