[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓

news2024/11/24 15:38:30

🙌秋名山码民的主页
😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🙏作者水平有限,如发现错误,还请私信或者评论区留言!
🙌这是博主的汇编专栏: 参考教材为汇编语言_王爽老师

目录

  • 前言
  • 从机器语言到汇编语言
    • 机器语言和机器指令
    • 汇编语言和汇编指令
    • 汇编语言和机器语言的关系
  • 汇编语言的工作流程
  • 插入计组知识——计算机的组成
    • 计算机的存储单元
    • 计算机的总线
  • 内存读写和地址空间
    • 地址空间
  • 最后


前言

我们的口号: 编写高效、精简的汇编语言程序,踩着硬件的鼓点,掌握计算机的精髓!

汇编语言在不同的领域和应用场景中有着不同的重要性,也在大学基础教程中起着不可或缺的作用,例如:

  1. x86汇编:PC机上最广泛使用的汇编语言,应用于操作系统、编译器、驱动程序等方面。
  2. ARM汇编:移动设备和嵌入式系统上广泛使用的汇编语言,应用于单片机、嵌入式操作系统、物联网等方面。
  3. MIPS汇编:应用于路由器、游戏机、数字信号处理等领域。
  4. PowerPC汇编:应用于高性能计算机和游戏机等领域。
  5. AVR汇编:常用于单片机和电子嵌入式系统开发。

所以学习汇编语言还是很有必要的,最怕的结果就是要用的时候不会(dog)

本章节的主要任务就是了解汇编语言,为后面编写汇编语言的章节打好基础!

从机器语言到汇编语言

机器语言和机器指令

我们知道机器语言都是有01二进制代码组成的,它被用于与计算机硬件交互的指令集。计算机的底层语言,是由CPU能够直接执行和解释的语言形式。机器语言编写的程序必须被翻译成机器指令才能被计算机执行。每一条机器指令都对应着机器语言中的一条指令,用于告诉CPU执行具体的操作,例如将数据从寄存器中读取、将数据写入内存地址等。

机器指令是指计算机硬件能够直接识别和执行的单条指令。与高级语言不同,机器指令不需要经过编译或解释器的处理,而是直接由CPU解码并执行。机器指令通常由一个操作码和操作数两部分组成,其中操作码表示指令的类型,操作数则表示需要被操作的数据或地址。这个在计算机组成原理中有详细介绍

汇编语言和汇编指令

汇编语言程序需要通过汇编器将其翻译成对应的机器指令,才能被计算机执行。汇编语言的出现更像是为了程序员好记而诞生,它是由一些助记符构成的,这些助记符和指令的操作码一一对应。

汇编指令是汇编语言中最基本的语言单元,它是由操作码和操作数两部分组成的。操作码表示指令要执行的操作类型,例如“MOV”表示将数据从一个存储区移到另一个存储区,而操作数则表示操作的目标地址或者是源数据。汇编指令按照不同的操作类型被分为不同的类型,例如数据传输指令、算术运算指令、逻辑运算指令等等。在汇编语言程序中,汇编指令可以结合标签和特定的寻址方式来定位具体的内存地址,访问其中的数据和代码。

汇编语言和机器语言的关系

  1. 机器语言和汇编语言,两者都是计算机能够理解和执行的指令序列。

  2. 机器语言是由二进制代码组成的指令集,它直接与计算机硬件进行交互,对硬件进行控制和操作。机器语言是计算机指令的最基本形式,所有的计算机程序最终都需要被翻译成机器语言才能被计算机执行。

  3. 而汇编语言则是机器语言的助手,在程序员和计算机之间建立了一座桥梁。汇编语言是一种基于机器语言,并通过符号助记符号来描述指令、寄存器、内存地址等的语言。在汇编语言中,程序员可以使用可读性更高的符号和命令来表示机器指令,使得程序设计和调试更加容易和直观。

因此,机器语言和汇编语言之间的关系是密不可分的。汇编语言是机器语言的翻译助手,可以帮助我们更加高效地对计算机进行控制。

汇编语言的工作流程

上面我们说明了从机器语言到汇编语言的基本过程,那么汇编语言的工作流程是什么呢?它需要翻译成机器语言后才能执行吗?

我们先看汇编语言的工作流程:

  1. 编写汇编语言程序:使用汇编语言编写指令序列,描述程序需要执行的操作和控制流程。

  2. 汇编程序:汇编器把汇编语言程序翻译成机器语言指令,生成目标代码文件。目标代码文件包括机器语言指令、数据、符号表等信息。

  3. 链接目标文件:将目标文件与其他目标文件或库文件链接在一起,生成最终的可执行文件。链接器把汇编语言程序所需的库函数、标准程序等一起打包成可执行文件。

  4. 装载程序:把可执行文件装载到内存中,并准备好执行环境。装载程序把程序代码和数据加载到相应的内存地址空间中,然后把控制权交给程序开始执行。

  5. 执行程序:CPU执行程序,根据指令序列完成各种操作和控制流程,包括算术和逻辑运算、内存读写、跳转、分支等。程序执行完毕后,返回结果并退出。

通过上序流程,我们不难发现,汇编语言程序是原始的指令序列,需要经过汇编、链接和装载等多个阶段才能变成可执行的程序。因此,汇编语言程序的调试和优化也需要在不同阶段进行,包括语法检查、运行时错误检查、代码分析和优化等。

插入计组知识——计算机的组成

在这里插入图片描述

  1. CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,我们要让它进行工作,就必须要向它发出指令
  2. 指令和数据存放到内存中,所以离开了内存再好的CPU也无法工作,比如bios,离开硬盘能进去,但是离开内存就进不去

指令和数据都存储在内存或硬盘上
例如:开机后,打开保存的程序,从硬盘读取到内存,再由内存转到CPU进行指令的执行。

指令和数据都是二进制数

计算机的存储单元

计算机当中的存储单元指储存和读取数据的基本单元,主要包括以下几种类型:

  1. 寄存器:位于CPU内部的存储单元,用于暂存指令和运算的数据。寄存器具有极快的存取速度和访问效率,但容量较小,一般只有几十个到一百个。

  2. 缓存:位于CPU和主存之间的存储单元,用于加速CPU对数据的访问速度。缓存分为一级缓存和二级缓存,一级缓存放置在CPU内部,二级缓存放置在CPU芯片上或者主板上,容量比寄存器大,但比主存小。如今的cpu一般都有三级缓存。

  3. 主存:也称为内存,是计算机中最主要的储存单元,用于存放程序和数据。主存的容量一般比CPU内部的寄存器和缓存大得多,但访问速度比较慢。

  4. 辅助存储器:例如硬盘、光盘、U盘等,用于长期储存数据和程序,容量巨大,但是访问速度比主存慢很多。

不难发现,一般情况下来说,存储器的速度和容量一般都呈现出反比,不可兼顾,否则我们只要有一个存储器就足够了,哈哈哈

计算机的总线

专门连接CPU和其他芯片的导线,通常称为总线
在这里插入图片描述
物理层面:一根根导线的集合
逻辑层面:地址总线,数据总线,控制总线
它们分别负责传输地址信息、数据信息和控制信息,是计算机中各个存储单元之间进行数据交换的基础。

  1. 地址总线:地址总线用于传输内存地址信息,它的宽度决定了CPU可以寻址的内存容量。例如,如果地址总线宽度为20位,那么CPU最多可以寻址2的20次方,即1MB的内存空间。当CPU需要读取或写入数据时,它会将地址信息发送到内存或设备的控制器中,用于选择特定的存储单元。

  2. 数据总线:数据总线用于传输数据信息,它的宽度决定了CPU和存储单元之间可以传输的数据位数。例如,如果数据总线宽度为32位,则可以一次性传输32位的数据。当CPU需要读取或写入数据时,它会通过数据总线和系统总线将数据信息传输到内存或设备中。

  3. 控制总线:控制总线用于传输控制信息,它包含了各种控制信号,例如读写控制、中断请求、时钟信号等。当CPU需要与存储单元或设备进行交互时,它会通过控制总线向相应的存储单元或设备发送控制信号,控制其进行数据传输、状态转移等操作。

内存读写和地址空间

由于我们学习汇编语言的时候是直接和内存进行打交道的,所以关于内存的读写和地址空间,我认为有必要主要的聊聊。

汇编语言程序必须通过内存寻址来访问计算机内存中的数据和指令。在程序执行时,汇编语言程序会产生不同的机器指令,这些指令会直接加载到计算机内存中执行。在执行过程中,程序需要通过内存寻址定位指令和数据的位置,并进行相关的操作。不仅直接与内存进行交互,还直接涉及CPU中的寄存器、缓存和控制器等硬件器件

CPU对存储器的读写:

  1. 获取存储单元的地址(地址信息)
  2. 器件的选择,读或写命令(控制信息)
  3. 读或写的数据(数据信息)

地址空间

什么是地址空间?

  • CPU地址总线为N,寻址空间为2^N B

我们从CPU角度来看地址空间的分配:

从CPU的角度来看,地址空间是指CPU可以访问到的内存地址的范围。在CPU中,地址空间被划分为不同的区域,每个区域被分配给不同的存储单元,例如内存、I/O设备、寄存器等。CPU在执行指令时,需要根据指令中的地址信息访问相应的存储单元,从而完成指令的执行。

  • 在32位CPU中,通常将整个地址空间分为4GB的虚拟地址空间和物理地址空间。虚拟地址空间是应用程序能够访问到的地址范围,它是针对每个进程单独分配的地址空间。系统通过虚拟内存管理机制将虚拟地址映射到物理地址上,从而实现虚拟地址空间的分配和管理。

  • 物理地址空间是CPU与实际物理内存之间的地址空间。物理地址是指计算机中真实的内存地址,它是硬件地址,对应的是内存芯片上的实际地址。物理内存对应的地址空间是映射到虚拟地址空间中的某个区域上,由操作系统通过页表来完成地址映射。

  • 在CPU中,地址空间的大小由地址总线的宽度来决定。如果其地址总线的宽度为32位,那么其地址空间的大小为2的32次方(即4GB)。在现代CPU中,通常采用了与此相比更大的地址总线宽度,以支持更大的地址空间和更高的内存容量。

CPU需要寻址和读写内存中的数据和指令,地址空间的划分和管理直接关系到系统的性能、可靠性和安全性。

如下图所示,CPU与地址空间的联系:
在这里插入图片描述

最后

如果本文对你有所帮助,还请三连支持一下博主!
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库系统工程师——第二章 程序语言基础知识

文章目录📂 第二章、程序语言基础知识 📁 2.1 程序语言概述 📖 2.1.1 程序语言的基本概念 📖 2.1.2 程序语言的基本成分 📁 2.2 程序语言翻译基础 📖 2.2.1 汇编程序基本原理 📖 2.2.2 编译程序…

算法之归并排序

文章目录一、归并排序(递归版)二、归并排序(非递归版)一、归并排序(递归版) 归并排序思想:将数组划分为两个区间,左区间,右区间 然后对这两个区间内容进行排序 &#xff…

一文讲懂C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别

微软的命名很糟糕。技术上有两个框架:ASP.NET和ASP.NET Core,它们分别基于.NET Framework和.NET Core构建。 当Microsoft首次尝试创建一个遵循MVC模式的“现代”Web应用程序平台时,它将这个新平台称为“ASP.NET MVC”,以区别于以前…

【性能优化】cocoscreator 共享节点-动效复用方案

前言 迷雾散尽,露出了古朴庄严的森林。古老的铁杉,在头顶编成绿色穹顶。 阳光在树叶间破碎成金色顶棚。从树干间远眺,远处的森林渐渐隐去。 用几句话就能描述一片巨大的森林,但是在实时游戏中做这件事就完全是另外一件事了。 当屏…

[数据结构-C语言] 算法的时间复杂度

目录 1.算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 3、常见时间复杂度计算举例 3.1 冒泡排序 3.2 二分查找 3.3 阶乘递归 3.4 斐波那契数列 1.算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 …

PS学习记录——自动选择的【图层】/【组】模式说明

PS中,【移动工具】状态下,上方的工具栏有个【自动选择功能】,用于移动图像 自动选择下有【图层】、【组】两种选项 1、自动选择-【图层】 图层模式下,自动选择可以任意移动选中的图像图层,想移动哪个就移动哪个 即便不…

43.CSS grid布局

本节我们学习的初始代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" …

110页智慧农业解决方案(农业信息化解决方案)(ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 第一部分 智慧农业概述 智慧农业以农业资源为基础、市场为导向、效益为中心、产业化为抓手&#xff0c;面向农业管理部门、农技推广部门、农业企业、农业园区和基地、农业专家…

【C】Pointer

系列连载 【python / C / C】 参考 《C语言程序设计&#xff08;第四版&#xff09;谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录一、指针的重要性二、指针的定义三、指针的分类基本类型指针指针和一维数组指针和函数指针和结构体多级指针int * p;// p …

CASS自带数据-绘制地形图

1、打开cass软件&#xff0c;如下图&#xff1a; 2、点击“绘图处理”菜单栏&#xff0c;选择“展野外测点点号”&#xff0c;如下&#xff1a; 3、在命令栏输入绘图比例尺&#xff0c;这里选择默认1:500&#xff0c;点击回车键进入下一步&#xff0c; 4、在弹出的窗口中&#…

单片机通过串口向电脑端发送数据电脑端发送数据控制led

上节课我们学习了串口的理论部分&#xff0c;这节课我们要来学习实操部分。 要想实现单片机通过串口向电脑端发送数据&#xff0c;我们首先要来配置寄存器。 1.配置SCON SCON寄存器中的SM0配置为0&#xff0c;SM1配置为1决定了串口工作在模式一&#xff0c;也就是8位UART&am…

前端透明分栏设计

目前在开发一个基于众包的打分网站&#xff0c;前端遇到的一个需求是&#xff1a; 背景是电影的海报&#xff0c;且不能随着scroll-bar滚动&#xff0c;需要一个蒙版分为两栏&#xff0c;左侧是影视的媒体信息&#xff0c;不随页面滚动右侧是影视的基本信息和评分信息&#xf…

如何使用基于GPT-4的Cursor编辑器提升开发效率

程序员最恨两件事情&#xff1a;一是别人代码不写文档&#xff0c;二是要让自己写文档。随着 GPT-4 的到来这些都不是问题了&#xff0c;顺带可能连程序员都解决了。。。 之前一直觉得 AI 生成的代码也就写个面试题的水平&#xff0c;小打小闹&#xff0c;现在时代可变了。Curs…

@Conditional四个较常用的派生注解总结

该内容是在学习SpringBoot底层的时候&#xff0c;看到SpringBoot的使用&#xff0c;所以这的做一个简单的总结方便以后复习。可能会有一些问题&#xff0c;还望指出共同学习 Conditional注解&#xff1a; 作用&#xff1a;按照一定的条件进行判断&#xff0c;在满足给定条件后…

如果采用密钥对的形式登录系统后,如何由普通用户切换到root用户

使用xshell工具 采用秘钥的方式进行登录 创建一个新用户并设置密码 切换到新用户之后 su root 想要切换成root用户的时候 输入密码提示 su:Authentication failure su&#xff1a;身份验证失败 使用秘钥之后是不能使用密码再进行登录 我去阿里云查了一下 有一个相同…

stable diffusion 安装xFormers 报错:Couldn‘t install open_clip.

一、No module ‘xformers’. Proceeding without it. 这是因为没有安装xformers导致的。 解决办法&#xff1a; 在webui-user.bat文件这添加一行&#xff1a; set COMMANDLINE_ARGS--xformers如下图所示&#xff1a; 试着点击webui-user.bat&#xff0c;看能否下载&#xff…

17:00面试,17:04就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推…

你具备抽离与封装的思想吗?

笔者最近思考了自己参与的分布式系统业务的架构小细节&#xff0c;虽然笔者每天做的是实现部分需求与业务&#xff0c;但是笔者还是拥有很多时间去读底层源码的&#xff0c;加之笔者自身的思考与实践demo的总结&#xff0c;笔者将在本篇文章中提出笔者自己对“抽离”与“封装”…

Nginx编译安装及配置文件详解

写在前面 Centos版本&#xff1a;Centos 7.6 - 64bit Nginx版本&#xff1a;1.20.2 一、什么是Nginx Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 二、Nginx用在哪些地方 2.1 静态资源服务 动静…

mkv视频文件怎么转成mp4,这3个方法很好用

对于那些电脑不是很精通的小伙伴来说&#xff0c; mkv视频文件怎么转成mp4&#xff1f;小编先来介绍一下mkv视频格式&#xff0c;mkv是一种开放标准的自由的容器和文件格式&#xff0c;是一种多媒体封装格式&#xff0c;能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨…