寄存器详解(一)

news2024/9/26 3:22:32

目录

前言:

通用寄存器

示例:

 通用寄存器的划分

 汇编指令

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

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

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

相关文章

SRM系统:提升供应商关系管理的利器

在现代供应链管理中,供应商关系的稳定和优化对企业的成功至关重要。为了更好地管理和维护供应商关系,许多企业开始利用供应商关系管理(SRM)系统。本文将围绕SRM系统的功能,探讨其在供应链管理中的重要性和优势。 一、…

大模型时代下,算法工程师该何去何从?

目录 一、大模型时代的罪与罚1.1、快速演进的大模型技术1.2、模型表现出的惊人创造力1.3、大模型AI对算法工程师的威胁性 二、算法工程师的破与发2.1、破——大模型时代给算法工程师带来的新机遇2.2、发——算法工程师如何适应大模型时代的变革 三、大模型时代下人才发展洞察 大…

卷积神经网络【图解CNN】

文章目录 1.卷积运算2.池化3.全连接层 卷积神经网络可以看作一个函数或者黑箱,输入就是图片的像素阵列,输出就是这个图片是什么? 图片是X,那么就输出‘x’,图片是‘O’,那么就输出O; 在计算机眼中&#xff…

Spring Boot 系列4 -- 统一功能处理

目录 前言 1. Spring AOP 用户统⼀登录验证的问题 1.1 自定义拦截器 1.2 配置拦截器并配置拦截的规则 1.3 拦截器的原理源码分析 2. 统一异常处理 2.1 实现统一异常处理 2.2 测试统一异常处理 3. 统一的数据格式返回 3.1 统⼀数据返回格式的实现 3.2 测试统一的数据返…

struct iovec结构体使用

参考 struct iovec 结构体定义与使用 iovec介绍 是一个I/O向量。是与readv和writev操作相关的结构体,readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读(scatter read)和聚集写(gath…

爬虫008_流程控制语句_if_if else_elif_for---python工作笔记026

然后我们再来看一下这里的,判断,可以看到 再看一个判断,这里的布尔类型 第二行有4个空格,python的格式 注意这里,输入的age是字符串,需要转一下才行 int可以写到int(intput("阿斯顿法师打发地方")) 这样也可以

【算法心得】C++map用不着map.find(arr[j])!=map.end();js的map是map不是哈希;编译器选GNU

https://leetcode.com/problems/count-of-range-sum/ https://vjudge.csgrandeur.cn/problem/CodeForces-459D 这两题都是线段树,很明显的单点修改区间查询 leetcode那题我觉得map用hashmap就行,但是好像js里没有hashmap,那就 Map() 也行吧…

webpack复习

webpack webpack复习 webpack基本配置 拆分配置 - 公共配置 生产环境配置 开发环境配置 使用merge webpack-dev-server 启动本地服务 在公共中引入babel-loader处理es6 webpack高级配置 多入口文件 enty 入口为一个对象 里面的key为入口名 value为入口文件路径 例如 pa…

【EI/SCOPUS征稿】第三届智能电网与能源互联网国际会议(SGEI 2023)

第三届智能电网与能源互联网国际会议(SGEI 2023) 2023 3rd International Conference on Smart Grid and Energy Internet 为交流近年来国内外在智能电网和能源互联网领域的理论、技术和应用的最新进展,展示最新成果,2023年第三…

TSINGSEE青犀视频安防监控EasyCVR视频汇聚平台电子地图定位偏移的排查与解决

安防监控EasyCVR视频汇聚综合管理平台具有强大的数据接入、处理及分发能力,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、告警上报与查询、平台级联、云台控制、语音对讲、电子地图、轨迹跟踪、H.265自动转码等视频能力。 在视频监控管理平台TSINGSE…

第二章:多态

系列文章目录 文章目录 系列文章目录前言多态的概念概念 多态的定义及实现多态的构成条件虚函数虚函数的重写C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理动态绑定与静态绑定 单继承和多继承关系的虚…

外网渗透信息收集漏洞挖掘

外网渗透信息收集&漏洞挖掘 信息收集一、“资产收集”的重要性二、企业信息收集之域名信息收集2.1、通过域名找到公司2.2、通过公司找到域名3.3、收集每个域名的⼦域名 三、企业信息信息收集之移动资产3.1、移动端APP收集3.2、微信⼩程序收集 四、信息收集流程漏洞挖掘一、…

《面试1v1》ElasticSearch 和 Lucene

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

自动化应用杂志自动化应用杂志社自动化应用编辑部2023年第11期目录

数据处理与人工智能 大数据视域下无轨设备全生命周期健康管理技术的研究 赖凡; 1-3 三维激光扫描结合无人机倾斜摄影在街区改造测绘中的技术应用 张睿; 4-6 井上变电站巡检机器人的设计与应用 刘芳; 7-9 《自动化应用》投稿邮箱:cnqikantg126.com 基于机…

出现一次的数字(其他数字出现三次,两次)

位运算的知识点: 异或运算具有以下几个重要性质 交换律:a ^ b b ^ a 结合律:a ^ (b ^ c) (a ^ b) ^ c 任何数与0异或等于它本身:a ^ 0 a 任何数与自身异或等于0:a ^ a 0 对于数组中所有元素进行异或运算&#xf…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(一)

【前端实习生备战秋招】—HTML 和 CSS面试题总结(一) 1. 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE:trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto内核,Opera现已改用Goo…

接口测试如何在json中引用mock变量

在测试接口的时候,有的接口需要测试随机传入大量数据,查看数据库是否正常,但是大量的随机数据全靠自己手写会很慢,而且是通过json传递的数据。 这里我们就可以使用mock生成随机变量,然后在json中引用mock变量 首先看…

LeetCode面向运气之Javascript—第2500题-删除每行中的最大值-93.51%

LeetCode第2500题-删除每行中的最大值 题目要求 一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。 将删除元素中的最…

地址空间细致入微+深入了解页表

目录 地址空间保存了什么? 页表到底是怎么存储的 我们都知道,我们进程看到的空间其实是虚拟内存,真正的内存是需要页表的映射才能找到真正的物理内存,那么我我们有两个问题的引出那么进程地址空间是保存了什么呢?页表…

Android 获取网络连接状态新方法

一. 问题背景 Android12上,有的app模块判断当前网络的类型和连接状态时,还是使用的旧的API,导致返回的结果不准确,影响代码逻辑判断,本篇文章就这一问题,整理一下判断网络类型和连接状态的新方法。 二. 原因…