【汇编】寄存器(学习笔记)

news2024/9/20 22:51:01

一、CPU工作原理

1、CPU概述

CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

内部总线:CPU内部 <–> 各个器件

外部总线:CPU <–> 主板上其它器件

2、通用寄存器

8086CPU所有的寄存器都是16位的,可以存放两个字节(一个字)。

8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

8086上一代CPU(8088)中的寄存器都是8位的。

为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器(AX --> AH、AL)使用。

AH:高位、AL:低位

3、字在寄存器中的存储

1Word(字)= 2Byte(字节)= 16bit(比特)

一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器。

由于一个内存单元可以存放8位数据,CPU中的寄存器又可存放n个8位数据。计算机中的数据大多是由多个8位数据构成的

用十六进制来表示数据可以直观的看出这个数据是由哪些8位数据构成的。

在十六进制表示的数据的后面加 H,在二进制表示的数据后面加 B,十进制表示的数据后面什么也不加

4、汇编指令初识

汇编指令不区分大小写

汇编指令高级语言描述
mov ax,18(后面给前面赋值)AX = 18
add ax,8AX = AX + 8

丢失进位:进位制不能在8位寄存器中保存,但是CPU不是并真的不丟弃这个进位值

5、物理地址

跟mac地址的物理地址不同

CPU访问内存单元时要给出内存单元的地址

所有的内存单元构成的存储空间是一个一维的线性空间 --> 物理地址

6、16位结构的CPU

16位结构的CPU 特征:

  1. 运算器一次最多可以处理16位的数据
  2. 寄存器的最大宽度为16位
  3. 寄存器和运算器之间的通路是16位的

7、8086给出物理地址的方法

8086有20位地址总线,可传送20位地址,寻址能力为1M( 2 20 = 1 M B 2^{20}=1MB 220=1MB)。但是8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64k( 2 16 = 64 K B 2^{16}=64KB 216=64KB

8086CPU采用一种在内部用两个16位地址合成的方法来开成一个20位的物理地址

CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址

段地址和偏移地址通过内部总线送入一个称为"地址加法器"的部件

地址加法器将两个16位地址合并成一个20位的地址(段地址 x 16 + 偏移地址 = 物理地址

8、"段地址+偏移量"的本质

”段地址×16“ --> 二进制位左移4位

一个数据的二进制形式左移n位,相当于该数据乘上2的n次方

一个数据的n进制形式左移1位,相当于乘以n

9、段的概念

内存没有分段

段的划分来自于cpu:由于8086CPU "段地址 x 16 + 偏移地址"的方式给出物理地址,使得我们可以用分段的方式管理内存

编程时可以将若干地址连续的内存看成一个段,用段地址x16定位段的起始地址(基础地址),用段偏移地址定位段中的内存单元

  1. 段的起始地址一定是16的倍数
  2. 16位地址的寻址能力为64位 --> 一个段的最大长度为64K

CPU可以用不同的段地址和偏移地址形成一个物理地址

寻址范围:0~FFFFH

10、段寄存器

段寄存器:提供段地址

8086CPU有四个段寄存器:CS、DS、SS、ES

11、CS、 IP

CS和IP是8086CPU中最关键的寄存器,它指示了CPU当前要读取指令的地址。

CS:代码段寄存器(段地址)

IP:指令指针寄存器(偏移地址)

8086工作过程简要

  1. 从CS、IP指向内存单元读取指令,读取的指令进入指令缓冲区
  2. IP = IP + 所读取指令的长度,从而指向下一条指令

12、CS:IP的修改

1)转移指令

转移指令jump:修改CS、IP的值

jump 段地址:偏移地址

2)修改IP

jmp:修改寄存器中的值

jmp 某一合法寄存器

13、代码段

代码段:用来存放程序执行代码的一块内存区域

CPU只认被CS:IP指向的内存单元中的内容为指令 --> 将CS:IP指向所定义的代码段中的第一条指令的首地址

二、内存访问

1、内存中字的存储

任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字书单元和低位字节单元。

2、DS和[address]

CPU读取内存需要内存单元的地址

8086有一个DS寄存器,用来存放需要读取的内存的地址

mov bx,1000H
mov ds,bx
mov al,[0]

mov al,[0]:将段地址为ds、内存偏移地址为0的内容放到寄存器

数据 -> 通用寄存器 -> 段寄存器

8086不能直接将数据直接放入段寄存器(mov ds,1000H

3、move、add、sub指令

1)move

=

move 寄存器,数据
move ax, 6

move 寄存器,寄存器
move bx, ax

move 寄存器,内存单元
move ax, [0]

move 内存单元,寄存器
move [0], ax

move 段寄存器,寄存器
move ds, ax

move 寄存器,段寄存器
move ax, ds

2)add

+=

add 寄存器,数据
add ax, 6

add 寄存器,寄存器
add bx, ax

add 寄存器,内存单元
add ax, [0]

add 内存单元,寄存器
add [0], ax

3)sub

-=

sub 寄存器,数据
sub ax, 6

sub 寄存器,寄存器
sub bx, ax

sub 寄存器,内存单元
sub ax, [0]

sub 内存单元,寄存器
sub [0], ax

5、数据段

数据段:将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间

6、栈

栈特性:FILO(先进后出,后进先出)

两个基本操作:入栈、出栈

push ax
pop ax

8086出栈入栈都以字为单位进行

1、CPU怎么知道的哪里是栈?
2、执行push和pop时候,如何知道那个单元是栈顶单元?

8086CPU中,存在段寄存器SS(存放栈顶的段地址)、段寄存器SP(存放栈顶的偏移地址)

任意时刻,SS:SP指向栈顶元素

7、栈机制

pop只会移动SS:SP(指针),不会删除之前的值。

栈空时,栈中没有元素,不存在栈顶元素。SS:PP指向栈的最底部的字单元的偏移地址+2。

8、栈顶越界问题

依靠SS和SP保证能找到栈顶,CPU也不知道栈空间有多大。栈顶可能会超出栈空间。

pop空栈、push满栈 --> 栈顶越界(溢出攻击)

CPU提供记录栈顶上限和下限的寄存器,每次pop和push做检查,但是8086并没有。

9、栈和内存

栈空间是内存的一部分,只是一段可以以特殊方式访问的内存空间。

10、栈段

栈段:将长度为N(N<=64K)的一组地址连续、起始地址为16的倍数的内存单元,当作栈来使用

栈段只是编程的概念,CPU只认识SS:SP。

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

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

相关文章

老胡的周刊(第112期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 LocalAI[2] &#x1f916; 免费、开源的 Ope…

iOS自动化测试方案(三):WDA+iOS自动化测试解决方案

文章目录 一、背景二、环境准备三、总结四、扩展4.1、WDA Client4.2、先使用WDA实现自动化4.3、代码示例&#xff1a;4.4、脱离macOS测试iOS App自动化&#xff0c;两个解决方案&#xff1a;4.5、第二种解决办法&#xff1a;pip install -U weditor4.6、下载安装Appium-Inspect…

2023 年 42 周 - 学习 倦怠期回顾

2023 年 42 周 - 学习 & 倦怠期回顾 本周属于反思怪的时间&#xff0c;1/4 的内容涉及到反思自己&#xff0c;剩下超过 2/3 的内容是对于学习方法加强的笔记 顺便重新复习了一下上周的笔记&#xff0c;然后发现&#xff0c;其实周算错了……截图的日历直接用周日算成一周…

【tg】 7 GroupInstanceCustomImpl

group GroupInstanceCustomImpl 核心GroupInstanceCustomInternal G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.h 最核心是是GroupInstanceCustomInternal: private:std::shared_ptr<Threads> _threads;std::u…

python学习笔记:引用、浅拷贝和深拷贝(底层原理)

前言 在python中“一切皆对象”&#xff0c;包括整数&#xff08;int&#xff09;&#xff0c;小数&#xff08;float&#xff09;等 引用 Python解释器维护了一个内部的数据结构&#xff0c;称为命名空间或符号表&#xff0c;它将变量名与对象的内存地址关联起来。当您创建一…

【ArcGIS模型构建器】02:shp批量转kml/kmz

文章目录 一、加载实验数据二、设计模型构建器三、保存模型构建器 一、加载实验数据 打开ArcMap&#xff0c;加载专栏配套实验数据data02.rar中的&#xff0c;位于乡镇根目录文件夹内的15个乡镇矢量数据。 接下来跟我一步步实现用模型构建器批量转为kml。 二、设计模型构建器…

如何创建前端绘图和图表?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

外贸找客户软件:BotMaster 2023 Crack

具有多设备支持的全新 WhatsApp™ Business 批量发送器 最新9.0.2.1 稳定且工作。 测试日期&#xff1a;2023 年 10 月 9 日 所有功能工作正常。 图像发送问题固定 数字过滤器和组抓取器已修复。 目前稳定 现在使用 BotMaster 9.0.2.1 从 WhatsApp™ 发送交互式按钮 您现在可以…

设置host

macOS sudo nano /etc/hosts sudo nano /etc/hosts127.0.0.1 yourdomain.com 127.0.0.1 subdomain.yourdomain.com 将 yourdomain.com 替换为您要配置的域名&#xff0c;将 subdomain.yourdomain.com 替换为您要配置的子域名。确保 IP 地址为 127.0.0.1&#xff0c;这将指向…

C++对象模型(19)-- 函数语义学:成员函数

1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率&#xff0c;在C中&#xff0c;对普通成员函数的调用&#xff0c;会转换成对全局函数的调用。 假如有下面所示的成员函数&#xff1a; class Test { public:int m_i;int func(int a) {m_i a;retu…

划片机:半导体芯片是如何封装的?

半导体芯片的封装是指将芯片内部的电路通过引脚、导线、焊盘等连接起来&#xff0c;并保护芯片免受外部环境的影响&#xff0c;同时满足外部电路的连接需求。以下是半导体芯片封装的常见步骤&#xff1a; 1. 减薄&#xff1a;将晶圆研磨减薄&#xff0c;以便于后续的划片操作。…

2023京东双十一活动今晚20点开始?京东双十一时间安排和满减规则

2023京东双十一活动时间节点&#xff01; 京东双十一红包&#xff0c;同样是每天可以领取&#xff0c;10月23日开始&#xff0c;面额最高11111元。 京东app搜索【红包到手210】即可领取双11红包 (数字要带上) 2023年京东双11整体将围绕六个时期展开&#xff1a; 1、第一波&…

如何处理前端多语言支持?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

最成功的国产手机得到央视认可,自研系统走向国际挑战谷歌

随着美国对中国企业不断采取措施&#xff0c;中国手机企业都在努力自主创新&#xff0c;日前又一家国产手机自研操作系统被网友质疑&#xff0c;不过央视却肯定了这家企业在创新方面的优势&#xff0c;赞扬了它带动中国制造走向国际市场。 央视给予赞誉的这家企业就是小米&…

QSlider 类使用教程

文章目录 1、简介2 、公共类型3、属性4、functions4.1、访问属性相关 function4.2、公共槽4.3、Signal4.4、其他方法 5、设置样式 QT 官方文档参考地址&#xff1a;https://doc.qt.io/qt-5/qslider.html 1、简介 QSlider是垂直或水平滑块条控件&#xff0c;最常见的应用就是视…

摩尔信使MThings的报文管理功能

设备通信过程中&#xff0c;通道报文是关键调试信息。为了高效地辅助调试运维过程&#xff0c;摩尔信使MThings提供报文记录功能&#xff0c;支持丰富且友好的方法进行报文管理&#xff0c;包括&#xff1a;收发颜色标记、异常识别、通道过滤、支持Modbus全系列&#xff1b; 查…

springboot项目多数据源导致事务报错问题

springboot项目多数据源导致事务报错问题 序言报错日志报错原因解决办法序言 序言 之前有一篇讲了如何使用多数据源动态配置&#xff0c;这里遇到的一个问题和大家分享&#xff0c;在使用多数据源时&#xff0c;对数据进行更新和插入避免不了使用事务&#xff0c;使用多数据源…

推荐系统:从经典模型到深度学习,你需要掌握什么?

文章目录 &#x1f31f; 协同过滤&#xff1a;最经典的推荐模型&#xff0c;我们应该掌握什么&#xff1f;&#x1f31f; 深度学习革命&#xff1a;深度学习推荐模型发展的整体脉络是怎样的&#xff1f;&#x1f31f; TensorFlow入门和环境配置&#x1f31f; 模型特征、训练样本…

Delphi 编程实现拖动排序并输出到文档

介绍&#xff1a;实现拖动排序功能&#xff0c;并将排序后的内容输出到文档中。我们将使用 Delphi 的组件来创建一个界面&#xff0c;其中包括一个 Memo 控件用于输入内容&#xff0c;一个 ListBox 控件用于显示排序后的内容&#xff0c;并且提供按钮来触发排序和输出操作。 代…

万宾科技智能井盖传感器怎么使用?

时代在进步&#xff0c;科技在更新&#xff0c;人们身边的万事万物都在随着时代的脚步不断的前进。各种各样高科技技术在城市基础设施建设的过程中得到应用&#xff0c;很多智能产品不仅施工方便&#xff0c;而且可以向政府部门提供精准的数据&#xff0c;提高了相关管理人员的…