精华内容
下载资源
问答
  • 表示偏移地址寄存器
    千次阅读
    2018-09-30 10:52:09

    8086寄存器中,只有bx,bp,si,di这四个寄存器可以用在[……]中表示偏移地址。

    更多相关内容
  • 段地址寄存器偏移地址寄存器

    千次阅读 2020-11-15 12:43:19
    1. 数据寄存器:AX,BX,CX,DX 2. 地址寄存器,看图找规律

    1. 数据寄存器:AX,BX,CX,DX
    在这里插入图片描述

    2. 地址寄存器,看图找规律

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

    3. 看图可以知道,同一个物理地址,可以有不同组合的段地址和偏移地址。
    在这里插入图片描述

    展开全文
  • 段地址和段寄存器

    千次阅读 2020-09-16 10:45:28
    段地址和偏移地址 段地址随意定义只要找到物理地址就行 2、段寄存器 段寄存器就是提供段地址的 8086CPU有4个段寄存器 CS、DS、SS、ES当8086要访问内存时,由这4个段寄存器提供内存单元的段地址 CSIP是.

    1、8086外部提供了20位的地址总线,CPU内部只能提供16位地址

    两个16位地址转换为20位

    地址加法器合成物理地址的方法:

    物理地址 = 段地址*16 + 偏移地址(16进制数*16就是向左移动一位)

    在8-86PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址

    段地址随意定义只要找到物理地址就行

     2、段寄存器

    段寄存器就是提供段地址的

    8086CPU有4个段寄存器

    CS、DS、SS、ES当8086要访问内存时,由这4个段寄存器提供内存单元的段地址

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

    CS代码段寄存器

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

    //所以可以通过改变CS IP中的neir来控制CPU执行目标内容,如何改变CS IP

    不可以用MOV AX,123

    转移指令:JMP 2AE3:3(专用指令)

    仅仅修改IP:

    MOV AX,200

    JMP BX

    JMP AX

    上面是用寄存器中的值修改IP

    代码段

    对于8086PC机,可以根据需要将一组内存单元定义为一个段

    可以将长度为N的一组代码存放在一组地址连续的、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的从而定义一个代码段。

     

     

     

     

     

     

     

    展开全文
  • 前言 当CPU在访问内存单元的时候,需要给出内存单元的地址。所有内存单元构成了一个一维的线性地址空间,每个内存单元在整个空间都有一个唯一的地址,这个唯一的地址被称之为物理地址。...寄存器和

    前言

    当CPU在访问内存单元的时候,需要给出内存单元的地址。所有内存单元构成了一个一维的线性地址空间,每个内存单元在整个空间都有一个唯一的地址,这个唯一的地址被称之为物理地址。

    CPU通过地址总线送入存储器中的地址,必须是一个物理地址,存储器才能读写该内存单元。

    不同的CPU形成物理地址的方法不同,本篇讨论的是8086形成物理的过程,并且涉及到内存地址的数字皆为16进制。

    1. 16位结构的CPU

    16位的CPU拥有下面几种特性

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

    即在8086内部,能够一次性处理,传输、暂时存储的信息长度最大为16位。

    2. 物理地址的合成

    2.1 物理地址的来源

    但是8086的地址总线宽度却为20位,可以传送20位的地址,寻址能力达到 1 MB。但是从8086的内部构造来看,它只能送出16位的地址,寻址能力仅仅只有64KB,CPU内部的信息处理能力和外部的硬件最大传送能力不匹配,这无疑是对地址总线宽度的浪费。

    8086CPU内部为了匹配地址总线的寻址能力,采用了两位16位的地址合成一个20位的地址。

    即使用了段地址 + 偏移地址的概念。

    当CPU需要读写内存时,需要提供20位的物理地址,地址合成如下:

    • CPU中的相关部件提供两个16位的地址,一个为段地址,一个为偏移地址
    • 段地址和偏移地址通过内部总线送到地址加法器这个器件中
    • 地址加法器将两个16位的地址合成为一个20为的物理地址
    • 被合成后的物理地址通过内部总线送到输入输出控制电路中
    • 输入输出控制电路器件将地址送入外部总线中的地址总线中
    • 20位的地址被传送到内存中
    image-20210806204824769

    2.2 物理地址的合成过程

    地址加法器采用物理地址 = 段地址 * 16 + 偏移地址的方式对物理地址进行合成。

    计算机中的所有信息通过二进制的方式进行存储,16位的地址扩展为20位,那么只需要将段地址左移4位,也就是段地址 * 16

    合成过程如下:

    如果计算机需要访问一个内存地址为123C8H的内存单元,这是一个20位的地址

    因为地址是通过16进制的方式表示,在16进制中,一个数码需要使用4个bit表示。123C8H拥有5个数码,H是16进制的后缀,所以5个16进制的数码 = 5 * 4 = 20位

    将这个内存地址进行拆分,123C8H = 12300H + 00C8H

    image-20210806211932992image-20210806211947753

    image-20210806212008090image-20210806212023796

    得到物理地址后将物理地址由输入输出电路输出即可。

    二进制的 100 * 2 = 1000

    十进制的 100 * 10 = 1000

    同理

    十六进制的 100 * 16 = 1000

    2.3 段地址 + 偏移地址的本质含义

    段地址 + 偏移地址本质上就是利用一个基础的地址和一个相对于基础地址的偏移地址相加,得到具体的物理地址

    在8086CPU中,通过基础地址(段地址 * 16)+ 相对于段地址的偏移地址得到一个具体的物理地址。这里的基础地址是通过段地址 * 16获取。

    但是可能在其他的CPU中,基础地址可能是通过基础地址 * 32 实现,也有可能通过段地址 * 64实现。

    2.4 内存并未分段

    因为段地址这个概念的出现,可能有人认为内存是分成一个一个段的,每一个段有一个段地址,但是内存并没有分段,分段的划分来自CPU,内存是连续的,并没有分段。

    在一维坐标轴中,想要表示一个范围内的数据,也就是将坐标轴分段,通常使用区间进行表示。

    • 区间表示法:

    想要表示 3 到 7 这个区间,使用 [3, 7] 进行表示,但是还可以使用另外一种方法进行表示

    • 起点 + 范围表示法:

    起点是 3, 范围大小区间为 [0, 4](正反向),也能表示 [3, 7] 这个范围。

    而段地址 + 偏移地址和第二种方法神似。

    所以偏移地址的大小决定了一个段最大的长度

    在8086中,偏移地址是16位的,所以一个段的最大长度位 216 Byte,也就是64KB

    3. CS和IP

    3.1 CS和IP的概念

    CS寄存器(代码段寄存器), IP寄存器(指令指针寄存器),这两个寄存器是CPU中最重要的两个寄存器。

    它们指示了CPU当前需要读取的指令在内存上的物理地址。通过上面的物理地址的合成,需要段地址和偏移地址对一个物理地址进行合成,CS中就存放着段地址,IP中就存放着偏移地址

    在冯诺伊曼机器中,我们知道计算机指令应该是顺序执行的,计算机应当知道需要执行的下一条执行的指令的地址,那下一条指令的地址如何而来,下一条指令的地址就存放于 CS * 16 + IP 这个物理地址上。

    每当CPU需要执行指令的时候

    • CPU会将 CS 和 IP 的两个寄存器中的地址合成为物理地址
    • 通过内部总线将地址发送到输入输出控制电路
    • 输入输出控制电路将物理地址中发送到外部总线的地址总线上
    • 内存在收到物理地址的时候,会将对应的物理地址上的指令通过数据总线发送给CPU
    • CPU就能执行对应的命令
    • 执行命令后IP寄存器中的值会自动加上上一条执行指令的长度,以指向下一条需要执行的指令

    如果CPU需要执行其他位置的指令,修改CS和IP寄存器中的内容,即可挑选CPU需要执行的指令的地址。

    在内存中,我们知道指令和数据没有任何的区别,都是二进制数据,那么CPU在工作的时候,肯定不能将指令看为数据,肯定不能将数据看为指令,在我们看来完全一样的数据,CPU是怎么区分的呢?也就是什么时候将二进制数据看为指令,什么时候将二进制数据看为数据。

    其实我们只需要负责CS:IP寄存器指向的内容就好,也就是CPU将永远认为CS:IP寄存器指向的内存单元中的二进制数据就是指令。

    3.2 CS和IP的修改

    3.2.1 不能使用mov指令

    当我们想要修改AX,BX,CX,DX等通用寄存器中的内容的时候,我们需要使用mov指令进行修改。

    但是CS寄存器和IP寄存器中的内容不能使用mov指令修改。

    示范:

    ;错误
    MOV CS, 037F 
    
    ;错误
    MOV AX, 037F 
    MOV CS, AX 
    

    3.2.2 可以使用jmp指令

    一、同时修改CS和IP

    使用jmp指令可以修改CS和IP寄存器中的内容

    格式:jmp 段地址:偏移地址

    例如:

    假设 CS = 7777, IP = 8888

    现在执行指令 jmp 9999:0000

    执行了指令之后CS = 9999,IP = 0000

    二、只修改IP寄存器

    使用jmp指令加上通用寄存器,即可修改IP寄存器中的内容

    格式:jmp 寄存器

    例如:

    假设 CS = 7777, IP = 8888,AX = 0000

    现在执行指令 jmp AX

    执行了指令之后 CS = 7777, IP = 0000

    4. debug下的测试

    4.1 测试思路

    1000:0000 为程序入口

    执行:mov ax, 1000 ;mov bx, 2000

    执行后 ax = 1000, bx = 2000

    执行: jmp 2000:0000

    执行后:CS = 2000, IP = 0000

    跳转到内存中的 2000:0000 单元

    执行: add ax, bx

    执行后:ax = 3000,

    执行: jmp ax

    执行后: CS = 2000,IP = 3000

    跳转到内存中的2000:3000

    执行:mov cx, 1234

    执行后:cx = 1234

    image-20210807163507224

    4.2 测试

    1. 向内存中写入对应的指令
      image-20210807165329327

    2. 修改CS和IP的指向,使CS和IP指向程序的入口
      image-20210807165833921

    3. 执行mov ax, 1000 和 mov bx, 2000
      image-20210807170126774

    4. 执行了jmp 2000:0000之后,CS寄存器中的内容从1000改成2000,IP改成了0000;而接下来即将执行的指令也变成了2000:0000处的 add ax, bx ;执行后 ax = 3000
      image-20210807170525995

    5. 执行jmp ax 后,IP = 3000;而2000:3000处的指令为mov cx, 1234,执行了之后CX中的内容为1234
      image-20210807171028164

    展开全文
  • 1.bx(偏移地址存放在bx寄存器中) bx表示偏移地址偏移的大小,[bx]表示偏移地址内的存储数据 在debug中可以直接用[ ]表示,masm需要用bx表示 mov ax, [bx] mov ah, [bx] mov al, [bx] 三者不一样,前面寄存器的...
  • 物理地址=段地址X16(十进制)+偏移地址 == 物理地址=段地址X10(十六进制)+偏移地址 Cs是代码段寄存器,IP是指令指针寄存器 段地址 x 16 等于 左移四位 一个数据(16进制)左移1位,相当于乘以16。 一个数据 (十...
  • CS:代码段寄存器存放代码地址。 DS:数据段寄存器存放数据段段基地址。 ES:附加段寄存器存放附加段段基地址。 SS:堆栈段寄存器存放堆栈段段基地址。 这四个前三个都比较正常,来看一个例题理解一下...
  • 【汇编语言】寄存器和地址

    千次阅读 多人点赞 2021-03-04 18:40:57
    寄存器和地址 主要内容: 一、寄存器 (1)透明寄存器 (2)可编程寄存器 1.通用寄存器 2.专用寄存器 二、地址 (1)存储模型 (2)存储空间分段管理 (3)物理地址与逻辑地址 (4)操作数寻址过程
  • 一、通用寄存器 寄存器 编号(二进制) 编号(十进制) 64位 32位 16位 8位 累加寄存器 RAX EAX AX AL 000 0 计数寄存器 RCX ECX CX ...
  • 段寄存器详解

    千次阅读 2021-05-26 05:05:14
    寄存器均为16位寄存器功能CS(code segment)代码段地址寄存器存放代码段的起始地址DS(data segment)数据段地址...存放附加段的起始地址段选择符实模式下的段寄存器(如cs,ss等)在保护模式下叫段选择子(Selector),...
  • 地址和偏移地址

    千次阅读 2021-02-03 20:30:11
    cpu内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具 计算机只能处理0,1 二进制数据 每一条线可以处理 0,1 两种类型数据 所以20根线的 总共能拥有 2^20=1048576...
  • STM32寄存器的简介、地址查找,与直接操作寄存器

    万次阅读 多人点赞 2019-01-11 11:15:15
    寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。  简单来说,寄存器就是存放东西的东西。从名字来看,跟火车站寄存行李的地方好像是有关系的。只不过火车站行李寄存处,存放的行李;寄存器...
  • 段寄存器和8种地址寻址方式

    千次阅读 2016-08-28 07:50:28
    1. 取命令:段寄存器CS指向存放程序的内存,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存内取到下次要执行的指令。 2. 取堆栈:段寄存器SS指向用于堆栈的内存,SP是用来指向该堆栈...
  • 8086段寄存器

    千次阅读 2020-08-21 14:20:20
    8086的访问内存的时候:物理地址=段地址×16+偏移地址,这个段地址段寄存器来提供。8086有4个段地址寄存器,分别是CS,DS,ES,SS。其中CS是最为关键的,因为CS:IP指示了CPU需要读取的地址。IP是指令指针寄存器,...
  • 二、寄存器

    2021-11-01 11:01:15
    BX――基址寄存器(Base Register),常存放存储器地址 CX――计数器(Count Register),常作为计数器 DX――数据寄存器(Data Register),存放数据 为了兼容之前8位的寄存器,所以将这四个寄存器各自一分为二: ...
  • 前言 ´・ᴗ・` 微机系统的构成 外设 CPU结构 执行单元 BIU 寄存器 存储器组织结构 寻址方式 总结 ´◡`
  • 8086CPU段寄存器笔记

    2021-12-23 17:10:31
    8086CPU中段寄存器是内存管理中重要的组成部分,常用的段寄存器组成...在内存管理中,我们可以将一内存定义为一个,用一个段地址指示,用偏移地址访问内的单元,这取决于我们对CPU的安排,即 段地址 * (CPU位数
  • 寄存器PLC地址寄存器modbus协议地址

    万次阅读 多人点赞 2017-10-24 22:25:28
    寄存器PLC地址存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC...
  • 段地址和偏移地址

    万次阅读 多人点赞 2012-12-29 13:06:37
    8086:关于物理地址段地址*16+偏移 首先我们知道8086中段地址是从能被10H整除的地址开始的,即地址最后一位都是0(16进制表示)。这样在设计CPU时就没有必要表示这个最后一个0了。例如FFFF[0]H,这个地址,假设...
  • 指令指针寄存器IP:存放下一条指令的地址偏移量 (下一条指令的地址,CS给出基值+ip偏移地址,20位的物理地址) 标志寄存器FR:存放当前程序执行的状态,相加以后结果为0,溢出,符号位为正为负等。指令指针IP...
  • 段寄存器和段描述符

    千次阅读 2019-12-19 14:34:23
    文章目录0. 发展过程保护模式803861. 段寄存器1.0 选择子2. 描述符2.0 S+Type数据描述... 系统描述符-门描述符3.0 调用门设置使用3.1 任务门、中断门陷阱门4. 其它寄存器4.0. 调试寄存器4.1. 控制寄存器C...
  • 文章目录一、通用寄存器(GPR)二、EFLAGS寄存器(标志寄存器)三、指令指针寄存器(EIP)四、段寄存器(Segment Register) 通用寄存器(General Purpose Registers,32位,8个) 段寄存器(Segment Registers,16...
  • cpu要读写一个内存单元时,必须要知晓这个内存单元在哪,因此便可以通过ds(数据段寄存器和偏移地址两个参数,来确定这个内存单元在哪。 一、访问内存中的数据的方式 方式一:段地址(ds):[偏移地址] 方式二:[偏移...
  • 8086段寄存器偏移

    千次阅读 2017-12-07 12:27:45
    ...都知道8086的寄存器是16位的,也就是 只能寻址 64K(64k=2^16),但是却有20根地址...于是就想出了一个分段寻址的方法,也就是 基址+偏移量,其中基址和偏移量都是16位的,但是在计算地址的时候, 将
  • 地址和偏移地址的概念

    千次阅读 2016-05-10 23:12:00
    首先必须明白 cpu内存的区别: ...·cpu内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具。 ·计算机只能处理0,1 二进制数据,每一条线可以处...
  • 选择符和段寄存器

    千次阅读 2016-08-28 12:30:23
    这种寻址技术把内存空间分成一个或多个称为的线性区域,从而对内存中一个数据对象的寻址就需要使用一个的起始地址(即段地址一个偏移地址两部分构成。段地址部分使用16位的选择符指定,其中14位可以...
  • 段寄存器的琐碎知识

    2019-08-02 23:35:25
    在8086的时代,CPU寄存器是16位的,可是有20条地址线【1M的内存空间】,也就是16位没有办法表示所有的地址,所以出现了这一个概念 将1M的内存空间分成四个,每个的范围都小于 2162^{16}216——也就是0~216−12...
  • 【STM32】MDK中寄存器地址名称映射分析

    万次阅读 多人点赞 2018-04-04 18:11:07
    对于MCU,一切底层配置,最终都是在配置寄存器。 STM32F1xx官方资料: ...下面看看它是怎么把名字和寄存器联系在一起的: sfr p0=0x80; p0=0x00; sfr是一种扩充数据类型,点用一个内存单位,值域为0-255....
  • AX BX CX DX是CPU内部的四个16bit的通用寄存器,常用于存储数据,也叫数据寄存器,一般用于存放参与运算的数据或运算的结果。 为了兼容更古老的CPU,他们的16bit可以分为高八位第八位,如AH,AL。这种灵活的使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,226
精华内容 18,490
关键字:

存放段地址和偏移地址的寄存器

友情链接: DDR_MO.rar