2-1、地址加法器CS:IP

语雀原文链接

文章目录

    • 1、CPU组成
    • 2、通用寄存器
      • 16位寄存器的存储
      • 16位寄存器兼容8位
      • word 和 byte
      • 进位问题
    • 3、地址加法器
      • 不同的段地址和偏移地址表示同一个物理地址
      • 偏移地址的范围
      • 一个段的起始地址一定是16的倍数
    • 4、CS:IP
      • CS IP工作过程
      • jmp修改CS:IP
    • 5、DS和[address]
      • DS和[address]
      • mov add sub

1、CPU组成

  • 一个CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。
    • 运算器进行信息处理
    • 寄存器进行信息储存
    • 控制器控制各种器件进行工作
    • 内部总线连接各种器件,在它们之间进行数据的传递
  • 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。
  • 不同CPU,寄存器的个数、结构是不相同的。
  • 8086CPU有14个寄存器,AX BX CX DX SI DI SP BP IP CS SS DS ES PSW,这些寄存器都是16位二进制。
    • 其中4个段寄存器:CS、DS、SS、ES

2、通用寄存器

  • AX BX CX DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器
  • 不同CPU的通用寄存器的大小不一样,有8位,16位等等。8086CPU的所有寄存器都是16位,可以存放两个字节

16位寄存器的存储

image.png
image.png

16位寄存器兼容8位

  • 8086CPU的上一代CPU中的寄存器都是8位的,为了了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用
    • AX可分为 AH AL
    • BX可分为 BH BL
    • CX可分为 CH CL
    • DX可分为 DH DL

image.png

  • AX的低8位(0位7位)构成了AL寄存器,高8位(8位15位构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。下图展示了16位寄存器及它所分成的两个8位寄存器的数据存储的情况。

image.png

word 和 byte

  • 字节:byte,一个字节由8个bit组成,可以存放在8位寄存器中
  • 字:word,一个字由两个字节组成,分别称为这个字的高位字节和低位字节
  • CPU中,用16位寄存器来存储一个字(一个字占据两个内存单元,2字节)。高8位存放高位字节,低8位存放低位字节。

image.png

  • 上图中,我们从0地址开始存放4E20H,低8位存放20,高8位存放4E。地址0、1可以看成一个字单元。
  • 有两个概念可以普及下:
    • 0地址单元中存放的字节型数据是20H
    • 0地址字单元中存放的字型数据是4E20H
  • 上述概念总结如下:任何两个地址连续的内存单单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可看成一个地址为N的字单元中的高位字节单元和低位字节单元。

进位问题

  • 例子1:高位进位
MOV AX,8226H
MOV BX,8226H
ADD AX,BX
AX BX都是16位寄存器,此时AX的值是多少?答案:8226H + 8226H = 1044CH,但是寄存器只能放16位,AX的值是044CH
  • 例子2:低位进位
MOV AX,00C5H
ADD AL,93H
此时AX的值是多少?答案:AL原始是C5H,加上93H,等于158H,但是AL只是低8位寄存器(作为一个独立的8位寄存器),最高位1会丢失,丢失1也不会给AH,类似最终结果AX=0158(CPU并没有真的丢弃这个值),所以最终的AX=0058
  • 例子3:
MOV AX,00C5H
ADD AX,93H
此时AX的值是多少
AX=00C5H + 0093H = 0158H,AX是16位寄存器,能正常进位
  • 例子4:指令的操作对象位数不一致,以下都是错误的指令
mov ax,bl  在8位寄存器和16位寄存器之间传送数据
mov bh,ax 在16位寄存器和8位寄存器之间传送数据
mov al, 20000 8位寄存器最大可存放值为255的数据
add al,100H 将一个高于8位的数据加到一个8位寄存器中

3、地址加法器

  • 8086CPU有20位地址总线,似乎多余了,内部只能送出16位地址,寻址能力只有64KB,但是实际有1M的寻址能力。
  • 8086CPU在内部用两个16位地址合成形成一个20位物理地址
    • 两个16位寄存器,一个段地址、另一个偏移地址
    • 段地址和偏移地址通过内部总线送入一个地址加法器的部件,合成一个20位的物理地址

image.png

  • 地址加法器采用物理地址=段地址x16+偏移地址
  • 8086CPU要访问地址123C8H(20位长度)的内存单元

image.png

  • 对于一个16位的CPU,偏移地址范围0000H~FFFFH,如果段地址1000H,则该内存空间的地址范围

1000H * 16 + 0000H ~ 1000H * 16 + FFFFH
10000H ~ 1FFFFH
总共2^16=65536=64KB个内存单元

不同的段地址和偏移地址表示同一个物理地址

  • 下面的几个段地址:偏移地址,最终表示的物理地址都是21F60H

image.png

偏移地址的范围

  • 偏移地址16位,变化范围0FFFFH,最多是216=64KB个内存单元。如果给定一个段地址1000H,则这段寻址范围:10000H1FFFFH
  • 一个段的长度最大为64KB

一个段的起始地址一定是16的倍数

  • 物理地址=段地址x16+偏移地址
  • 16位偏移地址的范围:0~FFFFH
  • 所以一个段的起始地址一定是16的倍数

4、CS:IP

CS IP工作过程

  • CS和IP是8086CPU中最为关键的寄存器,它指出了当前要读取指令的地址。
  • CS寄存器存储段地址,IP寄存器存储偏移地址,CS:IP组成真真的程序入口的物理地址。
  • 每读取一次指令,IP=IP+所读取指令的长度,从而指向下一条指令
  • 8086CPU工作过程,初始化状态:CS=2000 IP=0000

image.png

  • 地址加法器

image.png

  • 输入输出控制电路

image.png

  • 20位地址总线

image.png

  • 读取内存中的数据

image.png

  • 指令缓冲器

image.png

  • IP增加

image.png

  • 执行控制器

image.png

  • AX=0123H

image.png

  • 读取2000:0003处的指令

image.png

  • 执行mov bx,0003H,最终BX=0003H

image.png

  • 读取2000:0006处的指令

image.png

  • 执行mov ax,bx,最终AX=0003 BX=0003

image.png

  • 读取2000:0008处的指令,add ax,bx ,01D8

image.png

  • 执行指令add ax,bx = 01D8,最终结果AX=0003,BX=0003

image.png

  • 8086CPU工作过程简要概述

(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器:
(2)IP=IP+所读取指令的长度,从而指向下一条指令;
(3)执行指令。转到步骤(1),重复这个过程。

jmp修改CS:IP

  • MOV CS,AAAAH 这种写法是错误的,8086CPU不支持将数据直接送入段寄存器,CPU提供了jmp指令用于修改段寄存器的值
  • 例子1:mov不能修改段寄存器的值

image.png

  • 例子2:jmp修改IP寄存器,直接写入数据
    • 073F:0100 写入指令 jmp 1234
    • 执行后IP=1234

image.png

  • 例子3:jmp修改IP寄存器,用其他寄存器的值
    • 073F:0100 写入指令 mov ax,1111
    • 执行后AX=1111
    • 073F:0103 写入指令 jmp ax
    • 执行后,最终IP的值等于AX的值,IP=1111

image.png

  • 例子4:jmp同时修改CS:IP寄存器的值
    • 073F:0100 写入指令 jmp 0700:2222
    • 执行后 CS=0700 IP=2222

image.png

5、DS和[address]

DS和[address]

  • [address]表示内存单元的偏移地址,8086CPU自动取DS寄存器中的数据为段地址
  • 例子1
    • 073F:0100 写入指令 mov ax,[011E]
    • 执行后mov ax,[011E],就是将DS作为段地址 011E作为偏移地址,073F:011E的值放到AX寄存器中
    • 此时073F:011E(低8位)存储2E,073F:011F(高8位)存储07
    • 最终结果AX=072E

image.png

  • 例子2

image.png

  • 例子3

image.png

mov add sub

  • mov指令访问内存单元时,mov指令只给出单元的偏移地址,段地址默认在DS寄存器中
  • mov指令可以有以下几种形式
mov 寄存器,数据  		比如:mov ax,8
mov 寄存器,寄存器  	比如:mov ax,bx
mov 寄存器,内存单元	比如:mov ax,[0]mov 内存单元,寄存器	比如:mov [0],ax
mov 寄存器,内存单元	比如:mov ds,[0]mov 段寄存器,寄存器  比如:mov ds,ax
mov 寄存器,段寄存器  比如:mov ax,ds

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

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

相关文章

蓝桥杯算法心得——仙界诅咒(dfs)

大家好,我是晴天学长,搜索型的dfs,差点开二维矩阵了,仔细一想,没那么夸张啊,哈哈哈,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1…

性能工具之JMeter二次开发总结

文章目录 一、前言二、自定义脚本三、自定义请求编写(Java Sampler)四、自定义函数五、小结 一、前言 掌握 JMeter 的脚本编写和执行,这基本已满足大部分的性能测试需求,但是面对各种各样的项目技术方案,有些需求是需…

mybatis多表查询(xml)

多表查询都用resultMap resultMap 说白了就是他可以手动设置映射参数&#xff0c;例如 可以指定 column代表数据库的参数 property 代表实体类的参数 <id column"roleid" property"id"></id> column代表数据库的参数 property 代表实体类…

【隐私计算】安全三方计算(3PC)的加法和乘法计算协议

ABY3中采用replicated secret sharing&#xff08;复制秘密分享&#xff09;机制&#xff0c;即2-out-of-3秘密分享&#xff0c;三个参与方的每一方都拥有share中的两份。下面来看一下这样做有什么好处。 2-out-of-3秘密分享 有 x , y x, y x,y两个操作数&#xff0c;先进行秘…

列表插槽使用

{label: 是否展示,prop: isShow,solt: true, }<!--自定义列 展示 1 不展示 0 --><template slot-scope"scope" slot"display"><div style"color: red;cursor: pointer"><el-switch v-model"scope.row.display" :…

在gitlab中使用gitlab-sshd替换ssh服务

参考&#xff1a;https://docs.gitlab.com/ee/administration/operations/gitlab_sshd.html 说明 gitlab-sshd 是 OpenSSH 的轻量级替代品&#xff0c;用于提供 SSH 操作。虽然 OpenSSH 使用受限的 shell 方法&#xff0c;但 gitlab-sshd 的行为更像是一个现代的多线程服务器应…

ssm的网上奶茶店系统(有报告)。Javaee项目。

演示视频&#xff1a; ssm的网上奶茶店系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybat…

智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.参考…

全面解析修复msvcr120.dll缺失问题的方法,msvcr120.dll丢失的原因

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“msvcr120.dll丢失”。这个错误通常会导致某些程序无法正常运行&#xff0c;给用户带来很大的困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何修复呢&#xff1f;本文…

【6】PyQt信号和槽

1. 信号和槽简介 信号和槽机制是 QT 的核心机制&#xff0c;应用于对象之间的通信 信号和槽是用来在对象间传递数据的方法当一个特定事件发生的时候&#xff0c;signal会被emit出来&#xff0c;slot调用是用来响应相应的signal的Qt中对象已经包含了许多预定义的 signal&#…

JAVA 线程池,及7大参数,4大拒绝策略详解

为什么要使用线程池 线程的生命周期&#xff1a;运行、就绪、运行、阻塞、死亡 下面是一个简单的创建多线程的方法。注意&#xff1a;工作中不可取。 创建线程的时候&#xff0c;我们避不开线程的生命周期。上面的方法虽然可以创建多线程&#xff0c;但是创建完成后&#xff0c…

Ubuntu 环境安装 Kafka、配置运行测试 Kafka 流程笔记

Kafka 介绍 Kafka 是一个由 Apache 软件基金会开发的开源流式处理平台。它被设计用于处理大规模数据流&#xff0c;提供高可靠性、高吞吐量和低延迟的消息传递系统。Kafka 可以用于构建实时数据管道和流式应用程序&#xff0c;让不同应用、系统或者数据源之间能够高效地进行数…

老师怎样避免精神内耗?

在老师的职业生涯中&#xff0c;遇到的挑战和压力可能会导致精神内耗&#xff0c;这会影响到心理和身体健康&#xff0c;更进一步影响到工作成果和个人生活。为了避免精神内耗&#xff0c;老师可以尝试以下方法&#xff1a; 1. 建立正面的心态&#xff1a;老师需要学会积极思考…

卡码网语言基础课 | 19. 洗盘子

目录 一、 栈的基本概念 二、 栈的操作 2.1 引入头文件 2.2 创建栈 2.3 栈的基本认识 三、 解答 通过本次练习&#xff0c;将学习到以下 C知识点&#xff1a; 栈的基本概念&#xff08;空栈、栈顶、栈底&#xff09;和特点&#xff08;先入后出&#xff09;入栈、出栈、获取…

PostGIS学习教程十:空间索引

PostGIS学习教程十&#xff1a;空间索引 回想一下&#xff0c;空间索引是空间数据库的三个关键特性之一。空间索引使得使用空间数据库存储大型数据集成为可能。在没有空间索引的情况下&#xff0c;对要素的任何搜索都需要对数据库中的每条记录进行"顺序扫描"。索引通…

设计模式——七大设计原则

设计模式——七大设计原则 1、单一职责原则&#xff08;SRP&#xff09;2、开放封闭原则&#xff08;OCP&#xff09;3、依赖倒转原则&#xff08;DIP&#xff09;4、里氏替换原则 (LSP)5、接口隔离原则 (ISP)6、合成/聚合复用原则 (CARP)7、迪米特法则 (LoD) 了解 设计模式 的…

如何使用llm 制作多模态

首先将任何非字符的序列信息使用特殊n个token 编码。 具体编码方法以图像为例子说明&#xff1a; 将固定尺寸图像如256256 的图像分割为1616 的子图像块。 将已知的所有图像数据都分割后进行str将其看做是一个长的字符&#xff0c;而后去重后方式一个词表。 使用特殊1024 个tok…

解决方案:Mac 安装 pip

python3 --version 通过以下命令来下载pip&#xff1a; curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py curl命令允许您指定一个直接下载链接。使用-o选项来设置下载文件的名称。 通过运行以下命令安装下载的包&#xff1a; python3 get-pip.py

【开源】基于JAVA的医院门诊预约挂号系统

项目编号&#xff1a; S 033 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S033&#xff0c;文末获取源码。} 项目编号&#xff1a;S033&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…

Day02 Liunx高级程序设计2-文件IO

系统调用 概念 是操作系统提供给用户使其可以操作内核提供服务的一组函数接口 用户态和内核态 其中 ring 0 权限最高&#xff0c;可以使用所有 CPU 指令&#xff0c; ring 3 权限最低&#xff0c;仅能使用 常规 CPU 指令&#xff0c;这个级别的权限不能使用访问硬件资…