汇编语言(第3版)- 学习笔记 - 第1章-基础知识

news2025/1/22 9:26:05

汇编语言(第3版)- 学习笔记 - 第1章-基础知识

  • 1.1 机器语言
  • 1.2 汇编语言的产生
  • 1.3 汇编语言的组成
  • 1.4 存储器
  • 1.5 指令和数据
  • 1.6 存储单元
  • 1.7 CPU对存储器的读写
  • 1.8 地址总线
  • 1.9 数据总线
  • 1.10 控制总线
  • 1.11 内存地址空间(概述)
  • 1.12 主板
  • 1.13 接口卡
  • 1.14 各类存储器芯片
  • 1.15 内存地址空间
    • 目前主流cpu的寻址能力
  • 1.1~1.10小结
  • 参考资料

1.1 机器语言

机器只认识 01,不同的机器对同一串01的理解还不一样。
(比如喇叭和显示器,具体怎么理解本质上是生产它的人为它定义的一套规则)
01适合机器识别,但不适合人类阅读。

1.2 汇编语言的产生

01这种机器语言人类用着不方便,但又要与机器沟通。
所以人类发明了一套与01对应的汇编语言
人类通过书写汇编指令来描述需求,再使用编译器翻译成机器能识别的01语言。

  1. 汇编指令机器指令一一对应,一个是给人看的,一个是给机器看的。
  2. 程序员—(编写汇编指令)—>编译器—(翻译成机器码)—>计算机。

在这里插入图片描述

1.3 汇编语言的组成

汇编语言发展至今,有以下3 类指令组成

组成说明
汇编指令机器码的助记符,有对应的机器码。是汇编语言的核心
伪指令没有对应的机器码,由编译器执行,计算机并不执行。(方便我们编写代码的临时工们)
其他符号+-*/等,由编译器识别,没有对应的机器码。

1.4 存储器

CPU控制整个计算机运作并进行计算,需要从内存中读取指令和数据;内存在计算机中的作用仅次于CPU,磁盘上的数据或程序需要读入内存才能被CPU使用。

打个比方:内存就像我们手头的现金,硬盘类似于定期存款或固定资产。相信没有人在跟朋友涮完火锅结账时,对收银说:稍等我卖套房先。

1.5 指令和数据

程序本身就是一串01,把这串01当作一条指令,还是一段数据,取决于你如何使用它。
书中的例子:
1000100111011000 这串机器码。
当成数据来用它表示89D8H
当成指令来用它表示mov ax, bx

(剧透:CPU的寄存器有默认分工。DS:BX 用它时就当它是数据,CS:IP用它时就当它是指令。理论上它们可以指向同一个地方,重复利用这段01。详情见下一章吧)

1.6 存储单元

存 储 单 元中 文 名 说 明
bit比特(位)我们使用的物理存储设备上最小的信息单元称为1比特。它是一个二进制单元。要么表示0要么表示1
Byte字节Byte = 8bit 。8位组成一个字节。如:11110000, F0
KB千字节1KB = 1024B。由于字节是基础单位,所以KB也常简写为K
MB兆字节1M = 1024K。简写为M
GB吉字节1G = 1024M。简写为G
TB吉字节1T = 1024G。简写为T

我们的内存相当于一个只有1列的表格。并且从0开始到最大位置,为每个格子分配了序号。这就是内存的地址。
知道目标的数据的地址(在第几格)就可以去读写数据。
在这里插入图片描述

1.7 CPU对存储器的读写

CPU与外部器件交互(标准说法是芯片)进行数据交换,需要三根神经与之联通才能交流。
CPU与外部关联的神经就叫总线。总线由:地址总线+控制总线+数据总线三部分组成。
以向内存读取数据为例:

  1. 控制总线:发送控制命令,告诉内存,我要读取数据。
  2. 地址总线:发送地址信息,告诉内存,我要读取第几格
  3. 数据总线:接受内存返回来的数据。

1.8 地址总线

总线的物理层面就是导线(CPU针脚,内存的金手指与之相连)。
通过总线传输的是电平信息(高电平1或低电平0)。
总线不是独木桥而是多车道。一排01一次性杀过去,对面就会心一笑。。。
可见地址总线车道数量决定了它的寻址能力。
如果一个CPU的地址总线有10条车道 ,那么们说这个CPU的地址总线宽度为10。
这个CPU最大可以寻找 210 = 1024 个内存单元。
在这里插入图片描述

10条车道每条或0或1进行排列组合,可以有1024种,每一种对应一个内存单元。
地址总线按照某一种组合把送信息过去,对面就知道CPU要找的是哪个单元了。

1.9 数据总线

数据传送靠数据总线。数据总线的宽度决定了 CPU 和外界的数据传送速度。(还是拿车道比喻,肯定越多一次运的货越多呗。)
8 根数据总线(8条车道)一次可传送一个 8 位进制数据(即一个字节)。16 根数据总线一次可传送两个字节。

8088CPU 的数据总线宽度为 8,
8086CPU 的数据总线宽度为 16。
向内存中写入数据 89D8H 时:
图1.5 展示了8088CPU 要分两次;
图1.6 展示了8086CPU 只需要转一次。

在这里插入图片描述在这里插入图片描述

1.10 控制总线

控制总线是一些不同控制线的集合,它决定了CPU对外部器件的控制能力。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。
其中,“读信号输出”控制线用于传送读信号,“写信号输出”控制线用于传送写信号。

1.11 内存地址空间(概述)

内存地址空间是CPU可寻址的内存单元范围,由地址总线宽度决定,如CPU地址总线宽度为10,则可寻址1024个内存单元。

1.12 主板

PC机的主板通过总线连接CPU存储器外围芯片组扩展插槽上的RAM内存条和各类接口卡

1.13 接口卡

CPU不能直接控制外部设备,而是通过总线向插在扩展插槽上的接口卡发送命令来间接控制外部设备。

1.14 各类存储器芯片

RAM:随机存储器。可读可写,断电清零。如:内存、显存。
ROM:只读存储器。只读不写,长久不变。如:CD、(显卡、网卡、板)各自的BIOS

注意:随机存储器中的“随机”是指想读哪读哪,不必按顺序从头逐个读取。而不是读到的内容随机。

在这里插入图片描述

1.15 内存地址空间

各种存储器都和CPU的总线相连,并且在CPU读写时被当作内存对待,组成逻辑存储器内存地址空间

在这里插入图片描述
在图 1.8 中,所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU 在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
在这里插入图片描述
图 1.9 告诉我们,
读取地址0~9FFFF的内存单元,实际上是读取主随机存储器中的数据;
向地址A0000B~FFFF的内存单元写入数据相当于向显存写入数据,可以显示在屏幕上。
C0000~FFFFF只读存储器,写入操作无效

内存地址空间
最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU 的角度考虑问题。对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU 导址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

目前主流cpu的寻址能力

CPU型号地址总线位数最大寻址能力
Intel 8086201MB
Intel 802862416MB
Intel 80386324GB
Intel Pentium324GB
Intel Pentium Pro3664GB
Intel Pentium II324GB
Intel Pentium III3664GB
Intel Pentium 43664GB
Intel Core Duo3664GB
Intel Core 2 Duo3664GB
Intel Core i3/i5/i748256TB
AMD Athlon/Duron324GB
AMD K6-2/K6-III324GB
AMD Athlon XP324GB
AMD Athlon 64401TB
AMD Phenom II X4/X648256TB

1.1~1.10小结

  1. 汇编指令是机器指令的助记符,同机器指令一一对应
  2. 每一种CPU都有自己的汇编指令集。
  3. CPU可以直接使用的信息在存储器中存放。
  4. 存储器指令数据没有任何区别,都是二进制信息
  5. 存储单元从零开始 顺序编号
  6. 一个存储单元可以存储8个bit,即8位二进制数(也就是一字节)
  7. 1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB
  8. 每一个 CPU 芯片都有许多管脚,这些管脚总线 相连。也可以说,这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
    地址总线的宽度决定了CPU的寻址能力;
    数据总线的宽度决定了 CPU与其他器件进行数据传送时的一次数据传送量;
    控制总线的宽度决定了CPU对系统中其他器件的控制能力。
    在汇编课程中,我们从功能的角度介绍了3类总线,对实际的连接情况不做讨论。

参考资料

百度百科:电平信息

在这里插入图片描述

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

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

相关文章

NSSCTF-[NSSRound#X Basic]ez_z3 [MoeCTF 2022]Art [HDCTF2023]basketball

目录 NSSCTF-[NSSRound#X Basic]ez_z3 [MoeCTF 2022]Art [HDCTF2023]basketball NSSCTF-[NSSRound#X Basic]ez_z3 题目下载:下载 查壳: 发现有upx壳,但是使用upx -d命令不能脱壳,载入十六进制编辑器查看 把XYU改为UPX&#x…

netty/websocket服务器配置阿里云SSL证书安全访问配置,亲测有效

背景:java 微服务包括https访问和websocket访问,当https接口访问ws请求时报错,因为https能访问wss。 申请阿里云免费证书后,搜索各种教程比如nginx配置方式、netty访问证书等。走了不少弯路,终于走通一种。 关键点:1…

龙蜥开发者说:亲历从基础设施构建到系统质量保障,龙蜥未来可期 | 第 19 期

「龙蜥开发者说」第 19 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者宋彦…

【Python】值得收藏,三元一次方程组的计算,快来看看有什么新奇的~~~

三元一次方程组的计算对于大家来说都不陌生了,但是用编程语言来解决方程组问题想必还是会有些大聪明们有点迷糊的,今天就带大家来看看是怎么利用python实现方程组的解集的; 本文主要分成两部分: 解题验算综述 解题 题目1 代码 …

Security中使用Redis管理会话(模拟cookie实现)

配置redis相关 1. 配置Redis package com.zzhua.blog.config.redis;import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.cor…

【HCIP】IPV6综合实验(ripng,ospfv3,bgp,6to4)

目录 一、IP规划 二、 连通公网部分(IPv4) 三、R1、R2上IPv4+v6配置 四、IPV6部分ip配置 五、IPV6部分OSPF&BGP协议配置 Ⅰ、 ospf Ⅱ、bgp 六、联通网络 需求: 1、AR1处于IPV4,也有IPV6的地址,有两个环回 2、AR45678处…

Golang Gin 请求参数绑定与多数据格式处理

之前学习了使用Gin框架的Engine的默认路由功能解析HTTP请求。现在我们来学习gin框架的参数绑定操作和请求结果返回格式。 处理POST请求时,使用context.PostForm或者context.DefaultPostForm获取客户端表单提交的数据。 像上述这种只有username和password两个字段的表…

CS:APP 第7章链接分步编译(cpp/cc1/as/ld)遇到的问题

环境 WSL Ubuntu 22.04.2 LTS gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 问题 问题一 cc1 命令找不到 cc1 命令在 /usr/lib/gcc/x86_64-linux-gnu/11/cc1 里,注意不同操作系统等可能 cc1 的位置不一样,可以使用 find 或者 locate 命令搜索。 通过下…

聊点技术 | 架构瘦身,让Bonree ONE跑得更轻

4月21日,博睿数据ONE有引力2023春季产品发布会圆满落幕,一体化智能可观测平台Bonree ONE 2023春季正式版正式发布,这一次发布的版本更轻、更强、更智能。 Bonree ONE在上一版基础上削减50%组件数量,下架两大高耗能组件&#xff0c…

97-TCP为什么要有一个“TIME_WAIT“的状态

文章目录 1.TCP为什么要有一个"TIME_WAIT"的状态(1) 可靠的终止 TCP 连接。(2) 保证让迟来的 TCP 报文有足够的时间被识别并被丢弃 ; 2.拓展带外数据 1.TCP为什么要有一个"TIME_WAIT"的状态 "TIME_WAIT"状态存在的原因主要有两点: (1) 可靠的终…

成功经验分享,Nacos注册中心实践,带你玩转Nacos

1、什么是 Nacos ? 官方:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 集: 注册中心配置中心服务管理 平台 nacos的特性包括: 服务发现和服务健康监测动态配置服务动态…

行人检测(人体检测)4:C++实现人体检测(含源码,可实时人体检测)

行人检测(人体检测)4:C实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)4:C实现人体检测(含源码,可实时人体检测) 1. 前言 2. 行人检测(人体检测)检测模型(YOLOv5) (1&#xf…

谈「效」风生 | 如何找到现有研发体系的「内耗问题」?

#第3期:如何找到现有研发体系的「内耗问题」?# 在上一期《谈到提升效能,我们应该如何下手?》我们聊到开始做研发效能的四个要点:评估现有流程、引入自动化工具、建立度量指标、持续改进。本期就围绕「评估现有研发体系…

二次创业接地气、强内功,三只松鼠从一棵树出发重造“人设”

民以食为天,自古以来,“吃”都是一门浅显与深奥并存的生意。产业链看似简单:种、收、制、卖,却足以令众多企业为之前赴后继十年、百年。 三只松鼠,正在这条变革的道路上砥砺前行。自去年4月开启全面转型以来&#xff…

C++ 赋值运算符重载

赋值运算符重载 运算符重载: C为了增强代码的可读性,可以对 运算符 进行重载,运算符重载 就是具有特殊函数名的函数,这个函数也具有返回值类型,函数名字和参数列表,它的返回值和参数列表的形式和普通函数…

基于SAM的二次开发案例收集分享

一、AnyLabeling[1]——制作人:vietanhdev AnyLabeling LabelImg Labelme Improved UI Autolabeling AnyLabeling软件是一个集成了YOLO、Segment Anything模型(AI支持)的高效数据标注工具,它可以通过点击目标的方式完成目标检…

商业银行财富管理“智能原生”能力呈阶梯化,AI助力商业模式趋向多元化发展

易观:金融业的财富管理从经营角度来看,是“客户与渠道管理场景运营产品研发”三位一体共同构建以客户为中心,数据驱动的业务经营体系。其中,“客户与渠道管理”是将客户利益作为核心目标,通过升级用户体验、客户全生命…

获奖名单公布|香港BlockBooster x Moonbeam黑客松圆满收官

Moonbeam基金会赞助的”Into the Socialverse”主题的BlockBooster黑客松于近日落幕。该活动由BlockBooster、OKX、Gitcoin和OxU香港区块链俱乐部联合主办,共有22个开发团队参赛。经过多位评委的严格筛选,3支优秀团队脱颖而出,获得Moonbeam基…

zookeeper集群命令使用

1.zookeeper脚本使用(地址填写集群中任意一个主机地址) 连接客户端命令行 /etc/zookeeper/zookeeper/bin/zkCli.sh -server 10.1.60.112:2181 启动zookeeper服务 /etc/zookeeper/zookeeper/bin/zkServer.sh start 停止zookeeper服务 /etc/zookeeper/zookeeper/bin/zkServer…

春风吹,战鼓擂,忆享科技-云服务事业部春季员工关怀活动集锦,温情相伴

前言 时序更替,忆享科技又迎来新的一年。回顾2022,忆享科技在风雨中前行,实现了一次又一次的突破。在这2023年春暖花开,万物复苏的美好季节,忆享科技怀抱着它满满的关怀向大家走来!春季云服务事业部开展了五…