寄存器详解(一)

目录

前言:

通用寄存器

示例:

 通用寄存器的划分

 汇编指令

cpu物理地址的形成

地址加法器运算示例:

1. 相关部件提供段地址和偏移地址

 2. 段地址和偏移地址送入地址加法器

 3. 段地址*16

4. 求出物理地址

 5. 输出物理地址

段的概念

Debug的使用

1.用R命令查看,改变CPU寄存器的内容

2.用D命令查看内存中的内容

 3.用E命令改变内存中的内容

4.用U命令将内存中的机器指令翻译成汇编指令

5. 用A命令以汇编指令的格式在内存中写入机器指令

 6. 用T命令执行CS:IP处的机器指令

代码段寄存器CS与指令指针寄存器IP

修改CS与IP的指令


前言:

CPU由运算器,控制器,寄存器等器件构成,这些器件依靠内部总线相连;

在CPU中,运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作,内部总线连接各种器件,在它们之间进行数据的传送

CPU中主要部件是寄存器,寄存器是CPU中可以用指令读写的部件,程序员可以各种寄存器中的内容实现对CPU的控制;

鉴于不同的CPU,寄存器的个数,结构是不同的,下述皆以8086CPU为例;

通用寄存器

1. 8086CPU中所有的寄存器都是16位,可以存放两个字节;

2. 用来存放一般性的数据,称之为通用寄存器,分别为AX BX CX DX;

示例:

数据: 18

二进制序列: 10010

寄存器AX中的存储情况:

 通用寄存器的划分

1. 由于8086CPU上一代是8位,为保证兼容性,所以将8086CPU中的AX BX CX DX这四个寄存器都可划分为两个独立使用的8位寄存器使用;

2. 通用寄存器AX的低8位(0位-7位)构成了AL寄存器,高8位(8位-15位)构成了AH寄存器;

    AH,AL寄存器是可以独立使用的8位寄存器

3. 同理,BX可分为BH与BL,CX可分为CH与CL,DX可分为DH与DL;

示例图:

 汇编指令

8086CPU一次性可以处理俩种数据

1. 字节:记为byte,1个字节由8个bit组成,可以储存在8位寄存器当中;

2. 字: 记为word , 1个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节;高位字节存储于通用寄存器中XH中,低位字节存储于通用寄存器XL中(X可取A B C D);

汇编指令举例
汇编指令控制CPU完成的操作用高级语言的语法描述
mov ax,18将18送入寄存器AXAX=18
mov  ah ,78将78送入寄存器AHAH=78
add ax,8将寄存器AX中的数值加上8AX=AX+8
mov ax,bx将寄存器BX中的数据送入寄存器AXAX=BX
add ax,bx将AX和BX中的数值相加,结果存在于AX中AX=AX+BX

注:书写汇编指令或寄存器名称时不区分大小写;

示例:

AX中的值:0000H                 BX中的值:0000H
程序段中的指令指令执行后AX中的数据指令执行后BX中的数据
 mov ax,4E20H4E20H0000H
add ax,1406H6226H0000H
mov bx,2000H6226H0000H
add ax,bx8226H2000H
mov bx,ax8226H8226H
add ax,bx044CH8226H

cpu物理地址的形成

CPU访问内存单元时,必须给出内存单元的地址;

所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称之为物理地址;

8086CPU具有如下结构特性:

1. 运算器一次最多可以处理16位数据;

2. 寄存器最大宽度是16位;

3. 寄存器和运算器之间的通路为16位

即在8086CPU内部,可以一次性处理,传输,暂时存储的信息最大长度是16位,也就是8086CPU只能送出16位的地址,表现出的寻址能力只有64KB,但是8086CPU有20根地址总线,可以传送20位地址,达到1MB的寻址能力,为了处理这种矛盾,8086CPU采用一种在内部用两个16位的地址合成一个20位的物理地址的方法

 8086CPU读写内存时:

  1. CPU的相关部件提供两个16位的地址,一个称为段地址,一个称为偏移地址;
  2. 段地址和偏移地址通过内部总线送入地址加法器;
  3. 地址加法器将两个16位的地址合成一个20位的物理地址;
  4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
  5. 输入输出控制电路将20位物理地址送上地址总线;
  6. 20位物理地址被地址总线传送到内存。

地址加法器采用 段地址*16 + 偏移地址=物理地址 的方法合成物理地址;

地址加法器运算示例:

1. 相关部件提供段地址和偏移地址

 2. 段地址和偏移地址送入地址加法器

 3. 段地址*16

4. 求出物理地址

 5. 输出物理地址

 段地址*16+偏移地址=物理地址的本质含义是当CPU访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址

段的概念

内存是一个由若干存储单元组成的逻辑存储器,内存并没有分段,段的划分来自于CPU;

CPU用 段地址*16+偏移地址=物理地址 的方式给出内存单元的地址,使得我们可以用分段的方式管理内存;

示例:

 我们可以认为地址10000H-100FFH组成了一个段,该段的起始地址为10000H,段地址为1000H,大小为100H;

在编程时根据需要,将若干地址连续的内存单元看做一个段,用段地址*16定位段的起始地址,用偏移地址定位段的内存单元,注意以下两点

  • 段地址*16必然是16的倍数,所以一个段的起始地址为16的倍数;
  • 偏移地址为16位,即变化范围为0000H - FFFFH,寻址能力为64kb,所以一个段的长度最大为64KB

Debug的使用

debug是DOS Windows都提供的实模式程序的调试工具,使用debug,可以查看CPU各种寄存器的内容,内存的情况和在机器码级别跟踪程序的运行;

1.用R命令查看,改变CPU寄存器的内容

  • R — 查看寄存器的内容
  • R 寄存器名称 — 改变指定寄存器的内容

 

2.用D命令查看内存中的内容

  • D - 列出预设地址内存处的128个字节的内容
  • D 段地址:偏移地址-列出内存中指定地址处的内容
  • D 段地址:偏移地址 结尾偏移地址 - 列出内存中指定地址范围内的内容

 

 

 3.用E命令改变内存中的内容

  •  E段地址:偏移地址 数据1 数据2 ...
  •  E 段地址:偏移地址  (逐个询问式修改,空格-接受,继续   回车-结束)

 

4.用U命令将内存中的机器指令翻译成汇编指令

  • E 段地址:偏移地址 数据-以机器码的形式写入内存
  • D 段地址:偏移地址 - 查看机器码写入内存是否成功
  • U 段地址:  偏移地址 - 查看机器码所对应的汇编指令

5. 用A命令以汇编指令的格式在内存中写入机器指令

  • a 段地址:偏移地址 — 写入汇编指令
  • d 段地址:   偏移地址 — 查看汇编指令所对应的机器码
  • u 段地址:   偏移地址 — 查看代码

 6. 用T命令执行CS:IP处的机器指令

代码段寄存器CS与指令指针寄存器IP

任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从物理地址=M*16+N的内存单元读取一条指令并执行;

即任意时刻,CPU将CS:IP指向的内容当做指令执行;

CPU工作过程:

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. IP中的值自动增加,使得CPU可以读取下一条指令此时IP指向下一条指令
  3. 执行指令(回到步骤1,重复此过程)

修改CS与IP的指令

能够修改CS IP的指令统称为转移指令,简介可以修改CS IP 的jmp指令

  • 同时修改CS IP ;可以采用 jmp 段地址:偏移地址; 该指令的功能是用指令给出的段地址修改CS ,偏移地址修改IP;
  • 只修改IP的内容 ;jmp 某一合法寄存器 ;该指令的功能用寄存器中的值修改IP

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线五子棋对战

目录 数据管理模块(数据库设计) 前端界面模块 业务处理模块 会话管理模块网络通信模块(session,cookie) 在线管理模块 房间管理模块 用户匹配模块 项目扩展 数据管理模块(数据库设计) 数据库中有可能存在很多张表&#xf…

MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图

MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息…

APP开发中的性能优化:提升用户满意度的关键

APP开发中的性能优化是需要持续进行的,它不仅能够让用户体验到 APP的使用感受,还能在一定程度上提升用户的满意度,从而提升 APP的粘性和转化率。不过在实际开发中,很多 APP开发公司会存在性能优化上的问题,这就需要了解…

[C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...

之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了Boost库文档 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…第二篇文章 分析实现了parser模块. 此模块的作用是 对所有文档html文件, 进行清理并汇总 🫦[C项目] …

【力扣每日一题】2023.8.4 不同路径3

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 在二维网格之上,让我们模拟从开头走到末尾,并且要经过所有能经过的点,问我们有多少种走法。 看到这道…

c++学习(异常)[28]

c语言处理错误机制 c异常概念 try {//保护的标识代码 }catch(ExceptionName e1) {//catch块 }catch(ExceptionName e2) {//catch块 }catch(ExceptionName eN) {//catch块 }匹配 优先调用链中最近的捕获 异常若不被捕获则报错终止程序 try { }catch ( ... ) //可以捕获任意类…

TCP的三次握手和四次挥手······详解

1、三次握手 三次握手是建立连接的过程 如图大致为三次握手的流程图: 当客户端对服务端发起连接时,会先发一个包连接请求数据,去询问能否建立连接,该数据包称为 “SYN”包 然后,如果对方同意连接,那么…

RabbitMQ:概念和安装,简单模式,工作,发布确认,交换机,死信队列,延迟队列,发布确认高级,其它知识,集群

1. 消息队列 1.0 课程介绍 1.1.MQ 的相关概念 1.1.1.什么是MQ MQ(message queue:消息队列),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制…

2024年杭州电子科技大学MEM项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段,不少考生开始持续将注意力集中在备考的规划中!杭州达立易考教育整合浙江省内的MEM目信息,为大家详细梳理了相关报考参考内容,方便大家更好完成择校以及针对性的备考工作。本期为…

史上最全docker启动命令

docker Docker 启动镜像 一、查看当前docker中下载的镜像,如下图,当前我的Docker容器中存在两个镜像 ,tomcat、mysql 二、启动镜像 (因启动命令参数过多,同时各种镜像启动时可以增加额外的参数,本次以启动mysql5.6为例…

(12)理解委托,反射,Type,EvenInfo,插件, 组合枚举,BindingFlags,扩展方法及重载,XML认识

一、复习委托事件 1、委托复习。 private delegate int MyDelegate(int a, int b); //1.定义委托类型private static void Main(string[] args){MyDelegate md new MyDelegate(AddDelegate);//2.声明委托变量int result md(1, 2);//3.调用委托Console.WriteLine(result);Cons…

Vue中默认插槽,具名插槽,作用域插槽区别详解

默认插槽&#xff1a; App.vue : 在app.vue中使用MyCategory&#xff0c;里面包裹的结构是不显示的&#xff0c;要想在页面中显示&#xff0c;就需要用到插槽。在子组件MyCategory中定义 <template><div class"container"><MyCategory title"美…

【Opencv入门到项目实战】(二):图像阈值与平滑处理

文章目录 1.图像阈值处理1.1简单阈值处理&#xff08;Simple Thresholding&#xff09;1.2自适应阈值处理&#xff08;Adaptive Thresholding&#xff09;1.3Otsus阈值处理 2.平滑处理1.1均值滤波&#xff08;Mean Filter&#xff09;1.2高斯滤波&#xff08;Gaussian Filter&a…

程序员自由创业周记#5:加一上线

程序员自由创业周记#5&#xff1a;加一上线 这是一位程序员进行独立开发创业的记录&#xff0c;将分享创业过程中的所思所想以及收支明细。 充实 如果说程序员独立创业的成功率只有5%&#xff0c;那如果家里有一位3岁多还没上幼儿园的小朋友要照顾&#xff0c;成功的概率至少还…

rv1109/1126 rknn 模型部署过程

rv1109/1126是瑞芯微出的嵌入式AI芯片&#xff0c;带有npu, 可以用于嵌入式人工智能应用。算法工程师训练出的算法要部署到芯片上&#xff0c;需要经过模型转换和量化&#xff0c;下面记录一下整个过程。 量化环境 模型量化需要安装rk的工具包&#xff1a; rockchip-linux/rk…

【Spring】(一)Spring设计核心思想

文章目录 一、初识 Spring1.1 什么是 Spring1.2 什么是 容器1.3 什么是 IoC 二、对 IoC 的深入理解2.1 传统程序开发方式存在的问题2.2 控制反转式程序的开发2.3 对比总结 三、对 Spring IoC 的理解四、DI 的概念4.1 什么是 DI4.2 DI 与 IoC的关系 一、初识 Spring 1.1 什么是…

flutter:Future、Stream、RxDart

Future 在Flutter中&#xff0c;Future是Dart语言中的一个类&#xff0c;用于表示异步操作的结果。与Future相关的的重要关键字包括async和await。 async&#xff1a;这个关键字用于在方法或函数声明前添加&#xff0c;以指示该方法为异步方法。在异步方法中&#xff0c;执行…

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…

用Apache Echarts展示数据

目录 1.后端代码 1.1 实体类&#xff1a; 1.2 SQL语句&#xff1a; 2.前端代码 2.1 安装 Apach Echarts安装包&#xff1a; 2.2 查找数据并赋值给Echarts 思路&#xff1a;后端查到数据&#xff0c;包装为map&#xff0c;map里有日期和每日就诊人数&#xff0c;返回给前端…

异或运算详解

异或运算详解 定义特性用途总结 定义 参与运算的两个数据,按二进制位进行 ^ 运算,如果两个相对应为值相同结果为0,否则为1 1 ^ 0 1 0 ^ 1 1 0 ^ 0 0 1 ^ 1 0特性 异或^运算只能用于数值(整数) x ^ 0 x x ^ x 0用途 两个值交换,而不用使用临时变量 a a ^ b; b b ^…