精华内容
下载资源
问答
  • 【汇编语言】寄存器和地址

    千次阅读 多人点赞 2021-03-04 18:40:57
    寄存器和地址 主要内容: 一、寄存器 (1)透明寄存器 (2)可编程寄存器 1.通用寄存器 2.专用寄存器 二、地址 (1)存储模型 (2)存储空间分段管理 (3)物理地址与逻辑地址 (4)操作数寻址过程

    寄存器和地址

    在这里插入图片描述

    一、寄存器

    (1)透明寄存器

    透明寄存器对应用人员来说不可见,不能直接控制

    (2)可编程寄存器

    具有引用名称、供编程使用

    1.通用寄存器

    处理器最常使用的整数通用寄存器,可用于保存整数数据、地址等

    32位IA-32处理器具有8个32位通用寄存器
    EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
    它们源自16位8086处理器的8个16位通用寄存器 AX,BX,CX,DX,SI,DI,BP,SP
    前4个寄存器还可分成高低字节,形成8个8位通用寄存器 AH,AL,BH,BL,CH,CL,DH,DL
    在这里插入图片描述

    • 32位通用寄存器
      寄存器名称 英文 中文 作用
      EAX Accumulator 累加器 使用频度最高,用千算术运算逻辑运算以及与外设传送信息等
      EBX Base Address 基址寄存器 常用来存放存储器地址,以方便指向变批或数组中的元素
      ECX Counter 计数器 常作为循环操作等指令中的计数器
      EDX Data 数据寄存器 可用来存放数据,其中低 16 DX 常用来存放外设端口地址
      ESI Source Index 源变址寄存器 用于指向字符串或数组的源操作数
      EDI Destination Index 目的变址寄存器 用于指向字符串或数组的目的操作数
      EBP Base Pointer 基址指针 默认情况下指向程序堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变批
      ESP Stack Pointer 堆栈指针 专用于指向程序堆栈区域顶部的数据,在涉及堆栈操作的指令中会自动增加或减少

    2.专用寄存器

    • 标志寄存器FLAG

      标志体现了某种工作形态,反映指令执行结果或控制指令执行形式。

      标志寄存器包含 组状态标志 、一 个控制标志和 组系统标志,其初始状态为000000002 H:

      • ►状态标志:记录指令执行结果的辅助信息
        状态标志有 6个 从低位到高位依次是:
      中文 缩写 全称
      进位标志 CF Carry Flag
      奇偶标志 PF Parity Flag
      调整标志 AF Adjust Flag
      零标志 ZF Zero Flag
      符号标志 SF Sign Flag
      溢出标志 OF Overflow Flag
      • ►控制标志:方向标志DF,仅用于用于串操作指令中,控制地址的变化方向
      • ►系统标志:控制操作系统或核心管理程序的操作方式
    • 指令指针寄存器EIP

      保存将要执行的指令在主存的存储器地址

      EIP 具有自动增量的能力 处理器执行完一条指令, EIP 就加上该指令的字节数,指向下一条指令

    • 段寄存器

      段寄存器表明某个段在主存中的位置
      6个16位段寄存器:CS DS SS ES FS GS

      寄存器
      代码段 CS(Code Segment)
      堆栈段 SS(Stack Segment)
      数据段 DS(Data Segment)ES (Extra Segment)FS GS

    二、地址

    (1)存储模型

    • 平展存储模型(Flat Memory Model)

      存储器是一个连续的4GB线性地址空间

      平展存储模型 (Flat Memory Model) 下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。线性地址空间也以字节为基本存储单位,即每个存储单元保存一个字节且具有一个地址,这个地址称为线性地址 (Linear Address) IA-32 处理器支持的线性地址空间是 0 ~ 2322^{32} - 1 (4GB 容量)。

    • 段式存储模型(Segmented Memory Model)

      存储器由一组独立的地址空间组成:段(Segment) 每个段都可以达到4GB

      段式存储模型 (Segmented Memory Model) 下,对程序来说存储器由一组独立的地址空间组成,这个地址空间称为段 (Segment) 。通常,代码、数据和堆栈位千分开的段中。程序利用逻辑地址 (Logical Address) 寻址段中的每个字节单元,每个段都可以达到 4GB。
      在处理器内部,所有的段都被映射到线性地址空间 程序访问一个存储单元时,处理器会将逻辑地址转换成线性地址 使用段式存储模型的主要目的是增加程序的可靠性。
      在这里插入图片描述

    • 实地址存储模型(Real-address Memory Model)

      实地址存储模型 (Real address Mode Memory Model) 8086 处理器的存储模型 IA-32 处理器之所以支持这种存储模型,是为了兼容原来为 8086 处理器编写的程序 实地址存储模型是段式存储模型的特例,其线性地址空间最大为 1MB 容量,由最大为 64KB 的多个段组成。

    (2)存储空间分段管理

    • 代码段(Code Segment):存放程序的可执行代码(处理器指令)
      • 段基地址:代码段寄存器CS指示
      • 偏移地址:指令指针寄存器EIP保存
    • 数据段(Data Segment):存放程序所用的数据,例如全局变量
      • 段基地址:堆栈段寄存器SS指示
      • 偏移地址:堆栈指针寄存器ESP保存
    • 堆栈段(Stack Segment):程序需要的特殊区域,存放返回地址、临时变量等
      • 段基地址:数据段寄存器DS指示,有时也用ES、FS和GS指示
      • 偏移地址:存储器寻址方式计算出,有效地址EA指示

    (3)物理地址与逻辑地址

    在这里插入图片描述

    1.物理地址

    主存储器需要处理器通过总线进行访问,称为物理存储器。物理存储器的每个存储单元有一个唯一的地址,这个地址就是物理地址 (Physical Address) 。物理地址空间从 开始顺序编排,直到处理器支持的最大存储单元。

    2.逻辑地址

    存储器空间可以分段管理,采用逻辑地址指示

    • 逻辑地址=段基地址∶偏移地址
      • ►段基地址=在主存中的起始地址
      • ►偏移地址=距离段基地址的位移量
    • 处理器内部以及程序员编程时采用逻辑地址

    不论是何种存储模型,程序员都采用逻辑地址进行程序设计,逻辑地址由段基地址和偏移地址组成 段基地址(简称段地址)确定段在主存中的起始地址,以段基地址为起点,段内的位置可以用距离该起点的位移量表示,称为偏移 (Offset) 地址 。

    3.逻辑地址与物理地址的转换

    在这里插入图片描述

    • 实地址方式的地址转换

      通电或复位后, IA-32 处理器处千实地址方式 (Real- address Mode , 简称实方式) 它实现了8086 相同的程序设计环境,但有所扩展

      • 主存空间1MB:00000H~FFFFFH
      • 程序设计时分段管理,但有两个限制:
        • 每个段最大为64KB
        • 段只能开始于低4位地址全为0的物理地址处
      • 逻辑地址=段地址∶ 偏移地址
        • 16位段寄存器保存20位段起始地址的高16位
        • 偏移地址也用16位数据表示
      • 物理地址=段地址×16(左移二进制4位)+偏移地址
    • 保护方式的地址转换

      保护方式 (Protected Mode) IA-32 处理器固有的工作状态 在保护方式下, IA-32 处理器能够发挥其全部功能,可以充分利用其强大的段页式存储管理以及特权与保护能力 保护方式下, IA-32 处理器可以使用全部 32 条地址总线,可寻址 4GB 物理存储器

      • 16位段寄存器保存16位段选择器
      • 段选择器指向64位段描述符(Descriptor)
      • 段描述符包括段基地址
        • 平展存储模型:指向地址0位置
        • 段式存储模型:指向线性地址空间不同的段
        • 实地址存储模型:保存段基地址的高16位

    (4)操作数寻址过程

    1.段选择器

    • 保护方式的16位段寄存器被定义为段选择器
    • 包含3个域,指向一个段描述符
      • 索引域
        记录段描述符在“描述符表”内的位置
      • 表指示位TI
        指示要寻址的描述符表
      • 请求特权层RPL
        反映请求本次存取的特权级别

    2.段描述符

    描述符是保护方式引入的数据结构,8个字节64位,段描述符:“描述”段的属性

    • 段界限(segment limit):用于存储空间保护
    • 基地址(base address):用于形成物理地址
    • 访问权字节(access rights byte):段访问权限:该段当前是否驻留主存、该段所具有的特权层和段类型,用于特权保护
      在这里插入图片描述

    3.操作数寻址过程举例

    • (1)段选择器的TI域指明描述符表,获得描述符表基地址
    • (2)利用索引值指向该段的段描述符
    • (3)从段描述符中取出段基地址,从逻辑地址中取出段内偏移地址
    • (4)基地址与偏移地址相加,得到操作数的线性地址

    在这里插入图片描述

    展开全文
  • CPU中的寄存器和地址概念

    万次阅读 2016-03-17 10:18:12
    一般的CPU都是由以下部分组成:运算器、控制器和寄存器。 这些器件之间自然也要相互交换信息,所以他们也是有导线相连的,也就是总线了。但是这个总线是内部总线,而CPU内存、显卡之类做信息交换的是外部总线。 ...

    一般的CPU都是由以下部分组成:运算器、控制器和寄存器。

    这些器件之间自然也要相互交换信息,所以他们也是有导线相连的,也就是总线了。但是这个总线是内部总线,而CPU和内存、显卡之类做信息交换的是外部总线。

    他们的作用分别是:

    运算器:信息处理

    寄存器:信息储存

    控制器:控制器件

    好吧,从名字来看就很容易明白……

    通用寄存器(8086CPU):

    8086CPU寄存器都是16位的,可以存放两个字节,一个字节是八个二进制位哦。

    它的通用寄存器有:AX,BX,CX,DX,话说就是ABCD嘛。

    特殊的是这些寄存器都是可以拆成8位寄存器来使用,为了兼容。

    AX可以拆分为AHAL

    BX可以拆分为BXBL

    CX可以拆分为CHCL

    DX可以拆分为DHDL

    H代表high的意思,L代表low的意思,这样是不是很好理解。

    这个16位寄存器,说起来就是它里面可以存放0和1的小格子有16个。一个小格子就是一个二进制位。

    来张图应该会很清晰,没网……以后补充吧……

    说到这里,如果你看到这样的一个数字4E2C,不用慌张,它是一个16进制的数据。这种类型的数据,你只要死死记住,16禁止的一位,相当于二进制的四位,所以呢4E2C你要是换算成二进制,它是16个。

    书上的例子是这样的:

    4E20,这是一个16进制数,换算以后成二进制:0100111000100000,

    4就是0100,E就是1110,2就是0010,0就是0000.怎么换算还不知道,请打你的计算机老师……

    最后,有些时候我们不能一眼看出它是一个16进制数,或者说会有误解的时候,就会在十六进制数的后面加上一个H,这里的H不是high,而是Hex的意思。

    二进制数呢,就会在后面加上B,也就是byte的意思,而十进制数就不用加了,毕竟都是小学都会的。

    现在来使用寄存器吧!

    首先呢,在写汇编代码的时候,你不用区分大小写。

    比如:mov ax 22,这个是可以,他表示将22的数据送入AX寄存器

    不仅可以把数据送进寄存器,还可以把其它寄存器的数据送过来,如:mov ax bx 它表示把BX中的数据送入AX,当然,BX的数据还在的哦。

    如果你很高兴,mov AX 22 mov AX BX这种大写代码也是可以接受的……

    这里说到了mov ax bx的情况,有时候如果说ax寄存器没有数据,那么一切ok,但是如果ax里面有数据会怎么样?这个时候把bx的数据送进来,那ax的数据还在吗?

    答案是否定的,ax的数据将会被bx中传递过来的数据覆盖。

    其实很好理解,这个ax这个容器很小,当你把别的数据是送进来,它只能以这种方式存储数据。

    物理地址

    这里说的可不是你的MAC地址……

    在内存当中,不管你的内存有多大,CPU在访问的时候都是把它当成一维的,这样确保了每个内存单元都有唯一的地址。嗯,不排除以后科技更牛逼……

    这些内存单元的地址,就是它们的物理地址。

    CPU会首先在内部安排好地址,然后再发出去。那么CPU是怎么发出地址的?自然是靠地址总线。

    这里说的内存单元,绝不仅仅是内存条,还有显存之类的也属于内存单元。

    在讨论CPU问题,其实涉及到的是计算机的工作原理,和本质,我们不应当将概念人为地局限为一个或者一种特殊器件。

     

     

    展开全文
  • 寄存器PLC地址寄存器modbus协议地址

    万次阅读 多人点赞 2017-10-24 22:25:28
    寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本... 寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数...

           寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
           寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
           支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。

           使用 modbus 地址时应注意下述问题:

     1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。西门子 plc 的 modbus 地址是基于0的地址。 

    2)美国的 modbus 地址左起第2位用来表示元件的类型,例如 i0.0的 modbus 地址为010001。 因为数据类型已经包含在功能码中了, 西门子的 i0.0的 modbus 地址实际上为000000, i2.0的 modbus 地址为 000016(或十六进制数16#0010) ,而不是010017。

    3)、无论V寄存器还是M寄存器,里面的不同数据类型(VB、VW、VD、MB、MW、MD)都是基于寄存器内存总字节地址为偏移地址。

    4)、在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero.)

    5)、Modbus地址实际上分为两种情况。
    第一种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
    第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
    主站的计算机软件(例如DCS或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定Modbus RTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
    最容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
    S7 PLC手册给出的Modbus地址与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而西门子PLC采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。
    PLC系统手册中的Modbus地址的最高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。

     

    施耐德plc modbus地址对照表

    000001至000XXX是实际输出,对应%QX0.0-%QXX.X
    010001至010XXX是实际输入,对应%IX0.0-%IXX.X
    030001至030032是模拟量寄存器,对应%AIW0,16位一路依次类推
    040001至040XXX是保持寄存器,对应%MX0.0-%MXX.X,1对1,要是%MW就对应16位,依次类推。施耐德PLC中  W表示字 16位,D表示双字 32位。比如:%MW10和%MD10。B表示字节 8位,X表示位。比如:%MB0和%MX0.0~%MX0.7

    %MW10.4
    %MW10是指一个字,一个字分为2个字节,一个字节8个位,也就是说%MW10中有16个位,从%MW10.0~%MW10.15。
    %QW0.5.1.0.10
    Q是输出 ,0是机架,5是0号机架的第五个模块,1是第五号模块的第一个通道,0是第一个通道的第0个字,10是第0个字的第10个位。

    无论MX、MB、MW、MD都是基于内存总字节地址为偏移地址,也就是以%MB之后的地址为偏移地址。

    施耐德plc寄存器地址对应的modubs地址
    寄存器地址 modubs 说明 公式
    %QX1.0 000001.0 开关量输出 %QXx.y=000001+x.y
    %IX1.0 010001.0 开关量输入 %IXx.y=010001+x.y
    %AIW0 030001 模拟量输入 %AIWx=030001+x
    %MD40 0400801 保持寄存器 %MDx.y=040001+x*2.y
    %MW50.0         040051.0 保持寄存器 %MWx.y=040001+x.y
    %MX100.0 040051.0 保持寄存器 %MXx.y=040001+x/2.y
    注意:
    1、%MX100.0表示某个字节地址,因为%MW50这个地址中包含了%MB100、%MB101,%MX100.0其实是%MW50的第0位即40051.0
    2、%MD40表示双字,%MD40对应的首地址是%MW*2,也就是%MW80,%MD40对应的modbus地址为0400801

     

    西门子s7系列plc modbus地址对照表


            例如:地址:40040;对应S7200地址:VW78;对应S7300地址:DB1.DBW78;


    三菱FX系列PLC modbus地址对照表

    OMRON PLC地址转MODBUS协议对照表
    将OMRON PLC接入支持MODBUS协议的上位DCS系统中,通过ASC模块可满足用户的这一需求。具体方法参考:

    https://wenku.baidu.com/view/3ff1d16da5e9856a5712601d.html

    台达PLC寄存器地址与Modbus寄存器地址对照表
    https://wenku.baidu.com/view/f884db6d102de2bd97058836.html

    永宏PLC寄存器Modbus地址表
    https://wenku.baidu.com/view/4843e77c30126edb6f1aff00bed5b9f3f90f72c8.html
     

    信捷PLC寄存器Modbus地址表

    展开全文
  • 控制寄存器和系统地址寄存器

    千次阅读 2015-11-24 19:02:23
    控制寄存器和系统地址寄存器 目录(?)[+] [-] 一控制寄存器 保护控制位协处理器控制位CR2CR3 二系统地址寄存器 全局描述符表寄存器GDTR局部描述符表寄存器LDTR中断描述符表...

    控制寄存器和系统地址寄存器


    目录(?)[+]

     
        80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及 分页管理机制的实施。

    控  制
    寄存器
    CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
    CR0 PG 0000000000000000 ET TS EM MP PE
    CR1 保留
    CR2 页故障线性地址
    CR3 页目录表物理页码 000000000000

      BIT47—BIT16 BIT15—BIT0
    全局描述符表寄存器GDTR 基地址 界限
    中断描述符表寄存器IDTR 基地址 界限

    BIT15—BIT0
    局部描述符表寄存器LDTR 选择子
    任务状态段寄存器TR 选择子
     
    BIT31—BIT0 BIT31—BIT0 BIT11—BIT0
    基地址 界限 属性
    基地址 界限 属性

    <一>控制寄存器

        从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留, 供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指 示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器 操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留 位,这些位不能是随意值,必须为0。
        控制寄存器CR0的低16位等同于80286的机器状态字MSW。

    1.保护控制位

        控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作, 所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理 器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生 的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制 转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。
        下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机 制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。PE=0且PG=1是 无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。
    需要注意的是,PG位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的 代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才 能改变PG位。

    PG和PE
    位与处
    理器工
    作模式
    PG PE 处理器工作方式
    0 0 实模式
    0 1 保护模式,禁用分页机制
    1 0 非法组合
    1 1 保护方式,启用分页机制

    2.协处理器控制位

        控制寄存器CR0中的位1—位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位) 和ET(扩展类型位),它们控制浮点协处理器的操作。
        当处理器复位时,ET位被初始化,以指示系统中数字协处理器的类型。如果系统中存在 80387协处理器,那么ET位置1;如果系统中存在80287协处理器或者不存在协处理器,那 么ET位清0。
        EM位控制浮点指令的执行是用软件模拟,还是由硬件执行。EM=0时,硬件控制浮点指令 传送到协处理器;EM=1时,浮点指令由软件模拟。
        TS位用于加快任务的切换,通过在必要时才进行协处理器切换的方法实现这一目的。每 当进行任务切换时,处理器把TS置1。TS=1时,浮点指令将产生设备不可用(DNA)异常。 MP位控制WAIT指令在TS=1时,是否产生DNA异常。MP=1和TS=1时,WAIT产生异常;MP=0时 ,WAIT指令忽略TS条件,不产生异常。

    3.CR2和CR3

        控制寄存器CR2和CR3由分页管理机制使用。
        CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址 保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空 间中的哪一页引起本次异常。
        CR3用于保存页目录表的其始物理地址。由于目录是页对齐的,所以仅高20位有效,低12 位保留未用。向CR3中装入一个新值时,低12位必须为0;但从CR3中取值时,低12位被忽 略。每当用MOV指令重置CR3的值时,会导致分页机制高速缓冲区的内容无效,用此方法, 可以在启用分页机制之前,即把PG位置1之前,预先刷新分页机制的高速缓存。CR3寄存 器即使在CR0寄存器的PG位或PE位为0时也可装入,如在实模式下也可设置CR3,以便进行 分页机制的初始化。在任务切换时,CR3要被改变,但是如果新任务中CR3的值与原任务 中CR3的值相同,那么处理器不刷新分页高速缓存,以便当任务共享也表时有较快的执行 速度。

    <二>系统地址寄存器

        全局描述符表GDT、局部描述符表LDT和中断描述符表IDT等都是保护方式下非常重要的特 殊段,它们包含有为段机制所用的重要表格。为了方便快速地定位这些段,处理器采用 一些特殊的寄存器保存这些段的基地址和段界限。我们把这些特殊的寄存器称为系统地 址寄存器。

    1.全局描述符表寄存器GDTR

        如本文开始处的表格所示,GDTR长48位,其中高32位为基地址,低16位为界限。由于GDT 不能有GDT本身之内的描述符进行描述定义,所以处理器采用GDTR为GDT这一特殊的系统 段提供一个伪描述符。GDTR给定了GDT,如下图所示。
     
        GDTR中的段界限以字节为单位。由于段选择子中只有13位作为描述符索引,而每个描述 符长8个字节,所以用16位的界限足够。通常,对于含有N个描述符的描述符表的段界限 设为8*N-1。
        利用结构类型可定义伪描述符如下:
        PDESC STRUC
    
        LIMIT DW 0
    
        BASE  DD 0
    
        PDESC ENDS
    
    

    2.局部描述符表寄存器LDTR

        局部描述符表寄存器LDTR规定当前任务使用的局部描述符表LDT。如本文开始处的表格 所示,LDTR类似于段寄存器,由程序员可见的16位的寄存器和程序员不可见的高速缓冲 寄存器组成。实际上,每个任务的局部描述符表LDT作为系统的一个特殊段,由一个描 述符描述。而用于描述符LDT的描述符存放在GDT中。在初始化或任务切换过程中,把描 述符对应任务LDT的描述符的选择子装入LDTR,处理器根据装入LDTR可见部分的选择子 ,从GDT中取出对应的描述符,并把LDT的基地址、界限和属性等信息保存到LDTR的不可 见的高速缓冲寄存器中。随后对LDT的访问,就可根据保存在高速缓冲寄存器中的有关 信息进行合法性检查。
        LDTR寄存器包含当前任务的LDT的选择子。所以,装入到LDTR的选择子必须确定一个位 于GDT中的类型为LDT的系统段描述符,也即选择子中的TI位必须是0,而且描述符中的 类型字段所表示的类型必须为LDT。
        可以用一个空选择子装入LDTR,这表示当前任务没有LDT。在这种情况下,所有装入到 段寄存器的选择子都必须指示GDT中的描述符,也即当前任务涉及的段均由GDT中的描 述符来描述。如果再把一个TI位为1的选择子装入到段寄存器,将引起异常。

    3.中断描述符表寄存器IDTR

        中断描述符表寄存器IDTR指向中断描述符表IDT。如本文开始处的表格所示,IDTR长48 位,其中32位的基地址规定IDT的基地址,16位的界限规定IDT的段界限。由于80386只 支持256个中断/异常,所以IDT表最大长度是2K,以字节位单位的段界限为7FFH。IDTR 指示IDT的方式与GDTR指示GDT的方式相同。

    4.任务状态段寄存器TR

        任务状态段寄存器TR包含指示描述当前任务的任务状态段的描述符选择子,从而规定 了当前任务的状态段。任务状态段的格式在后面的文章中介绍。如本文开始处的表格 所示,TR也有程序员可见和不可见两部分。当把任务状态段的选择子装入到TR可见部 分时,处理器自动把选择子所索引的描述符中的段基地址等信息保存到不可见的高速 缓冲寄存器中。在此之后,对当前任务状态段的访问可快速方便地进行。装入到TR的 选择子不能为空,必须索引位于GDT中的描述符,且描述符的类型必须是TSS
    展开全文
  • 地址指针寄存器:SP,BP 变址寄存器:SI,DI 1, 指针寄存器:主要提供全部或部分偏移量 16位: SP堆栈指针寄存器 BP基址指针寄存器 SP:存放堆栈段中栈顶单元的偏移量 BP:存放堆栈段中某个单元的全部或部分偏移量...
  • 地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这...方法:基址寄存器与界限寄存器使用一种简单的动态重定位,把每个进程的地址空间映射到物理内存的不同部分。当使用基址...
  • Modbus寄存器地址规则

    万次阅读 2019-08-09 00:32:31
    Modbus协议定义的寄存器地址是5位十进制地址,即: 线圈(DO)地址:00000~09999 触点(DI)地址:10000~19999 输入寄存器(AI)地址:30000~39999 输出寄存器(AO)地址:40000~49999 由于上述各类地址是...
  • 本博文基于STM32F103ZET6MDK以及V3.5.0库函数; 本博文从Cortex-M3内核的寻址空间映射一直聊到库函数是怎样配置具体的某一个寄存器; 如有不足之处,多多指教; Cortex-M3存储器映射 由于STM32系列芯片为32位...
  • 1. 数据寄存器:AX,BX,CX,DX 2. 地址寄存器,看图找规律
  • 基址寄存器地址求解方式——这个记一下,没怎么整理,没找到系统的讲解 计算过程: 获取基址寄存器地址,为3 加上对应的段号,即为对应的实际物理段号 组合对应的段内地址,即为最终的结果 ...
  • STM32 获取寄存器地址

    千次阅读 2018-11-09 10:38:19
    如果需要使用TX1的DMA...在这里,外设地址应该是USART1的DR寄存器地址。可是如何获取该寄存器地址呢? 现在实测了3种方式,都可以实现。 方法1: 直接查询手册中寄存器映像(map),USART1的DR地址为0x400...
  • STM32寄存器的简介、地址查找,与直接操作寄存器

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

    千次阅读 2016-08-23 09:44:19
    首先要清楚的一点,所有操作,最终目的都是操作寄存器一,对比51单片机和STM... //关键字sfr 声明地址和名称的映射 P0=0x00; //将0x00赋值给P0口的8位(51单片机一组IO为8位)2)STM32: GPIOA->ODR=0x00000000 //为GPIOA的OD
  • modbus的寄存器地址

    千次阅读 2020-06-11 15:08:22
    modbus的地址,其实modbus的规范里面写的很明确了,但是最近还有人问我,其实这个很简单的。00001至09999是离散输出(线圈)-----Coil status10001至19999是离散输入(触点)-----Input status30001至39999是输入寄存器...
  • riscv寄存器各个地址含义

    千次阅读 2019-05-25 18:33:24
    初学须知,寄存器地址的使用 注意点: x0是常量0, 可以拿来做数字使用 但千万不能将其本身进行更改 很有可能会导致崩溃 其他位置对号入座使用即可! ...
  • 寄存器地址rs485设备地址的区别

    千次阅读 2019-08-09 15:49:31
    rs485设备地址是可以更改的,...寄存器地址:寄存器在内存上面,暂时存储数据 地址 指令的;寄存器本身有地址也称之为内存地址;寄存器的地址是不能改变的,他时控制系统内核潜制进去的,用户只用使用权,不可更改 ...
  • 树莓派4B 寄存器地址查询

    千次阅读 2020-12-27 00:03:42
    树莓派4B 寄存器地址查询 树莓派4B的datasheet在我看来非常混乱复杂,尤其是地址映射方面。单datasheet就有两个版本而且还自相矛盾。为了查找到确定的物理地址,使用官方提供的函数进行读取。 首先在应用层插入...
  • 寄存器地址总线

    2014-01-10 09:45:45
    寄存器: cpu中可以存储数据的器件,一个CPU钟可以有多个寄存器, 不同的寄存器有不同的代号,作用存放的数据也不同 word: 2 byte 一个字==2个字节 汇编语言不区分大小写 mov ax,18, 将数据18送入到...
  • 地址和寄存器

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

    千次阅读 2018-03-23 18:06:00
    CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 IP 为指令指针寄存器 。 什么叫做指示了 CPU 当前将要读取的指令呢?在 8086 CPU 中,为什么 CPU 会自动的执行指令呢? ...
  • 寄存器和8种地址寻址方式

    千次阅读 2017-11-28 17:13:26
    ...段寄存器是因为对内存的分段管理而设置的。...1. 取命令:段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。
  • DS 寄存器和 ES 寄存器: DS 数据段寄存器(Data Segment) ES 附加段寄存器(Extra Segment) 特点 1 属于段寄存器,不能直接保存数据,只能通过其他的段寄存器保存数据。 2 他们两个一个没有明显的区别,但是DS 是...
  • 寄存器值: u32RegValue = *((uint32 volatile *)(reg_addres)); 写寄存器值: *((uint32 volatile *)(reg_addres)) = value;
  • 获取寄存器地址的方法

    千次阅读 2017-11-16 11:21:30
    在这里,外设地址应该是USART1的DR寄存器地址。可是如何获取该寄存器地址呢? 现在实测了3种方式,都可以实现。 方法1: 直接查询手册中寄存器映像(map),USART1的DR地址为0x40013804 方法2: 手册...
  • 寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 2、寄存器地址:STM32给不同的寄存器分配了不同的地址 3、STM32的IO端口有八种模式: 1)、输入浮空 5)、开漏输出 2)、输入上拉 6)...
  • SS 寄存器和 SP 寄存器: SS 寄存器:Stack Segment (堆栈段寄存器) SP 寄存器:Stack Pointer(堆栈指针寄存器) 这两个寄存起是为了访问内存用的,SS为段寄存器,SP为偏移。 SP受PUSHPOP两个指令的影响。 PUSH ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 307,306
精华内容 122,922
关键字:

寄存器和地址