深入汇编:计算机工作机制解析

news/2024/11/17 9:45:59/文章来源:https://www.cnblogs.com/Arisf/p/18437589

深入汇编:计算机工作机制解析

计算机的工作原理

计算机的工作原理可以概括为以下几个步骤:

  1. 输入:用户通过键盘、鼠标或其他输入设备提供数据。
  2. 处理:CPU(中央处理单元)根据程序指令处理数据。
  3. 存储:内存和硬盘等存储设备用于保存数据和程序。
  4. 输出:处理结果通过显示器、打印机等输出设备展示。

汇编语言与计算机工作

汇编语言是一种低级编程语言,它非常接近机器语言。每条汇编指令几乎对应一条机器指令,这使得汇编语言成为理解计算机工作机制的绝佳工具。

汇编代码的工作过程

让我们通过一个简单的例子来分析汇编代码的工作过程:

	.file	"main.c".text.globl	gc.type	g, @function
g:
.LFB0:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6movl	%edi, -4(%rbp)movl	-4(%rbp), %eaxaddl	$4, %eaxpopq	%rbp.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE0:.size	g, .-g.globl	f.type	f, @function
f:
.LFB1:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6subq	$8, %rspmovl	%edi, -4(%rbp)movl	-4(%rbp), %eaxmovl	%eax, %edicall	gleave.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE1:.size	f, .-f.globl	main.type	main, @function
main:
.LFB2:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6movl	$10, %edicall	faddl	$1, %eaxpopq	%rbp.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE2:.size	main, .-main.ident	"GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2".section	.note.GNU-stack,"",@progbits

分析

这段汇编代码是从C语言代码编译而来的,它包含了三个函数:gfmain。这些函数展示了一个简单的调用链,其中main调用ff再调用g。下面是对每个函数的详细分析:

函数 g

g:
.LFB0:pushq   %rbp          ; 保存旧的基指针.cfi_startproc.cfi_def_cfa_offset 16.cfi_offset 6, -16movq    %rsp, %rbp    ; 设置新的基指针.cfi_def_cfa_register 6movl    %edi, -4(%rbp) ; 将第一个参数(%edi)存储在本地变量位置movl    -4(%rbp), %eax ; 将本地变量加载到 %eaxaddl    $4, %eax      ; %eax = %eax + 4popq    %rbp          ; 恢复旧的基指针.cfi_def_cfa 7, 8ret                  ; 返回调用者.cfi_endproc
.LFE0:.size   g, .-g
  • g 函数接受一个整数参数,将其增加4,然后返回结果。
  • 使用了基指针%rbp来管理栈帧,这是x86-64调用约定的一部分。
  • .cfi_*指令是调用帧信息,用于帮助异常处理和调试。

函数 f

f:
.LFB1:pushq   %rbp          ; 保存旧的基指针.cfi_startproc.cfi_def_cfa_offset 16.cfi_offset 6, -16movq    %rsp, %rbp    ; 设置新的基指针.cfi_def_cfa_register 6subq    $8, %rsp      ; 为局部变量分配8字节空间movl    %edi, -4(%rbp) ; 将第一个参数存储在本地变量位置movl    -4(%rbp), %eax ; 将本地变量加载到 %eaxmovl    %eax, %edi    ; 准备调用 `g`call    g             ; 调用 `g`leave                 ; 恢复 %rbp 和 %rsp 到函数调用前的状态.cfi_def_cfa 7, 8ret                   ; 返回调用者.cfi_endproc
.LFE1:.size   f, .-f
  • f 函数接受一个整数参数,调用g函数,并将其结果返回。
  • subq $8, %rsp为可能的局部变量分配空间,尽管在这个函数中没有使用。
  • leave指令是movq %rbp, %rsppopq %rbp的组合,用于恢复栈帧。

函数 main

main:
.LFB2:pushq   %rbp          ; 保存旧的基指针.cfi_startproc.cfi_def_cfa_offset 16.cfi_offset 6, -16movq    %rsp, %rbp    ; 设置新的基指针.cfi_def_cfa_register 6movl    $10, %edi     ; 准备参数10call    f             ; 调用 `f`addl    $1, %eax      ; %eax = %eax + 1popq    %rbp          ; 恢复旧的基指针.cfi_def_cfa 7, 8ret                   ; 返回调用者.cfi_endproc
.LFE2:.size   main, .-main
  • main函数是程序的入口点,它调用f函数,并将结果加1后返回。
  • movl $10, %edi将整数10作为参数传递给f

image

对“计算机是如何工作的”理解

计算机的工作可以看作是一个不断执行指令、处理数据和进行决策的过程。每条指令都是对硬件的直接操作,而汇编语言为我们提供了一种观察和理解这些操作的方式。

  1. 指令执行:CPU按照程序的指令顺序执行操作。
  2. 数据流动:数据在CPU、内存和输入/输出设备之间流动。
  3. 控制流:程序通过分支和函数调用来控制执行流程。

通过深入理解这些基本概念,我们可以更好地理解计算机的工作原理,以及如何编写更高效的程序。

结语

计算机的复杂性往往掩盖了其基本的工作原理,通过分析汇编代码,我们可以看到计算机是如何通过执行一系列指令来处理数据的。堆栈在函数调用和返回过程中起着关键作用,它帮助CPU管理函数的执行流程和参数。通过学习汇编语言和分析汇编代码,我们可以揭开这层神秘的面纱,更深入地理解计算机是如何工作的。这种理解不仅对于程序员至关重要,对于任何对技术感兴趣的人都是宝贵的知识。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/805191.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结对项目——小学四则运算题目自动生成器

这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <结对项目>这个作业的目标 <实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)>团队成员 <杨富国(3122004587)、李思柔(3222004638)>Github项目地址 https…

XSS攻击和CSRF攻击

一、XSS XSS,即跨站脚本攻击。是值攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。 比如在论坛上或者输入框内输入 "<alert>document.cookie</alert&…

解决win10无法用独显玩游戏的问题

首先要下载独显驱动。 https://www.nvidia.cn/Download/index.aspx?lang=cn 这时任务管理器里就可以看到独显占用率了。 然后桌面右键打开nvidia控制面板,把要使用独显的游戏设置为使用独显(如果默认不使用独显的话)如果还不行,可能是还需要装上CPU的核显驱动(很奇怪吧?…

day8[OpenCompass 评测 InternLM-1.8B 实践]

环境配置 创建开发机和 conda 环境数据准备 评测数据集启动评测 (10% A100 8GB 资源) 使用命令行配置参数法进行评测评测完成后,将会看到:

sha256sum文件哈希值和直接哈希字符串的哈希值不一样

例如在文件test.txt里写入 test没有换行。 然后 sha256sum test.txt出来的结果是 f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2 test.txt但是在这个网站上 http://encode.chahuo.com/ 输入test,然后以sha256方式哈希得到的结果是 9f86d081884c7d659a2f…

F-Droid使用教程

F-Droid下载地址:https://f-droid.org/ 默认的官方源太慢了。建议更换清华源。官方教程:https://mirrors.tuna.tsinghua.edu.cn/help/fdroid/ 先打开F-Droid,进入设置->存储库点进F-Droid存储库,可能会看到一些官方镜像:如果啥也没有,可能等一段时间就会出现。 把这些…

WPF 的Image 控件 设置 Image.Source 的数据源,可能存在跨线程调用的问题。

相信很多WPF 的开发,应该都很多用到 Image 这个控件来显示图片。这个图片的来源可以来自各种各样的方式获取到。 我们的组内白板、批注的扫码的功能也用到这个去生成二维码,生成后,二维码显示不出来,由于触发到了全局捕获,界面又没有崩溃,遇到了好几个坑,记录一下。 开始…

7-访问控制技术原理与应用

7.1 访问控制概述 1)概念 访问控制是指对资源对象的访问者授权、控制的方法及运行机制。 访问者又称为主体,可以是用户、进程、应用程序等; 资源对象又称为客体,即被访问的对象,可以是文件、应用服务、数据等; 授权是访问者可以对资源对象进行访问的方式,如文件的读、写、…

【赵渝强老师】基于大数据组件的平台架构

在了解了大数据各个生态圈所包含的组件及其功能特性后,就可以利用这些组件来搭建一个大数据平台从而实现数据的存储和数据的计算。下图展示了大数据平台的整体架构。视频讲解如下:大数据平台的Lambda架构大数据平台的Kappa架构大数据平台的总体架构可以分为五层,分别是:数据…

ctfshow-web-信息搜集(11-17)

web11 题目提示:域名其实也可以隐藏信息,比如ctfshow.com就隐藏了一条信息。 原理:通过Dns检查查询Flag。这里可以用阿里云的网站: Dns查询网站:阿里云网站运维检测平台 (aliyun.com)web12 题目提示:有时候网站上的公开信息,就是管理员常用密码 原理:查看robots.txt文件…

设备管理平台-支持快速开发

技术路线(同时支持前后端分离 / 前后端一体,可用于网关或者服务器部署) 前端:layui-v2.9.17 后端:Net8.0 使用组件 Swagger、Jwt、Freesql、MiniExcel、MemoryCache(存储登录用户信息,代替HttpContext.Session,也可使用Redis)系统架构 非市面上繁杂的架构(Model、Ser…

几款文本编辑器横向比较

文本编辑器 大文件编辑器 程序员编辑器几款文本编辑器横向比较 关键字: 大文件、编辑器 ‍ 编辑器功能及性能比较免责声明以下列选编辑器,仅限于本人日常接触的产品,带有强烈的个人主观和随机性,未列选产品并不代表不能满足功能需求。 测试数据(特别是时间),受限于观察条…