精华内容
下载资源
问答
  • 程序计数器 PC

    万次阅读 2010-04-26 13:54:00
    程序计数器是用于存放执行指令的地方。... 在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,C

    程序计数器是用于存放执行指令的地方。

     

      为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。 

          在程序开始执行前必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。

      当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。有些机器中也称PC为指令指针IP(Instruction Pointer)。

     

     

     

     

     

    展开全文
  • 程序计数器 PC

    千次阅读 2012-05-05 20:14:05
    冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二...程序计数器PC )正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指
    冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为‘指令计数器’CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC
     决定了程序运行流向。故而,程序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
        在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU  按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC  的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加“指令字节数”。
       当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。 


       ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度(下述标记为R15[31:0],表示R15 的‘第31位’到‘第0位'),ARM 处理器可以直接寻址4GB 的地址空间(2^32 = 4G )。

    展开全文
  • 程序计数器PC详解

    千次阅读 2019-11-07 22:52:28
       冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二...程序计数器PC )正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照P...

       冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC 决定了程序运行流向。故而,程序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
      在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU 按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC 的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加“指令字节数”。
      当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目 标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。
      ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度(下述标记为R15[31:0],表示R15 的‘第31位’到‘第0位’),ARM 处理器可以直接寻址4GB 的地址空间(2^32 = 4G )。
      (解释什么是字对齐什么是半字对齐)存储器是计算机中用于记忆数据信息的电子装置,它通过记忆“高/低”电平记忆“1/0”能记忆 1 位“1/0”数据的电子单元,称之为存储元,计算机中的存储器通常将每8 个这样的存储元组成一个单元,称之为字节,字节是处理器访问存储器的最小单位。ARM 处理器对存储器空间的访问分辨率以字节为最小单位;ARM 处理器还支持 16bit 数据(2 字节)的存储器访问和 32bit数据(4 子节)的存储器访问。在ARM 中将32 位的数据称之为‘字’,将 16 位的数据称之为‘半字’。
       ARM 处理器在对于“字”/ “半字”数据进行访问时,对数据的存储格式是有要求的。要求被访问的“半字”必须存放在存储器紧邻的两个字节单元,并且首字节地址必须能被2整除,这样存储的 16bit 数据称为 ‘半字对齐’存储数据,16bit 数据这样的存储方式称为 ‘半字对齐’存储。类似的,ARM 处理器在进“字”数据访问时,要求被访问的“字”必须 存放在存储器紧邻的4 个字节单元,并且首字节地址必须能被4 整除,这样存储的32bit 数 据称为‘字对齐’存储数据,32bit 数据这样的存储方式称为‘字对齐’存储。
      能被2 整除数据的二进制表示,其最低位一定是‘0’;能被4 整除数据的二进制表示,其最低两位一定是‘00’。ARM 体系要求32 位长的ARM 指令在存储器中必须字对齐存储,16 位长的 Thumb 指令必须半字对齐存储。因此,在ARM 状态下,R15 的值总是能被4 整除,也就是R15 寄存器的最低2 位总是 0;Thumb 状态下,R15 的值总是能被2 整除,也就是R15 寄存器的最低位总是0。

    展开全文
  • 什么是程序计数器程序计数器是一块 较小 的内存空间,它可以看做是当前线程所执行的字节码的 行号指示器 ;在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作...

    什么是程序计数器?

    程序计数器是一块 较小 的内存空间,它可以看做是当前线程所执行的字节码的 行号指示器 ;在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时,就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳准、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成 ;

    简单的理解为,是程序计数器保证了程序的正常执行 ;

    有什么特点

    线程私有的

    是java虚拟机规范里面,唯一 一个 没有规定任何 OutOfMemoryError 情况的区域

    生命周期随着线程,线程启动而产生,线程结束而消亡

    为什么具有这些特点

    这里重点理解 :程序计数器,可以看做是当前线程执行的字节码的 行号指示器 ,这句话;要理解这句话,需要先知道字节码文件长什么样子,看下面的代码

    // java 文件被翻译为字节码的时候,字节码大概类似于下面的样子

    public void haha(){

    // 原来的 haha 方法内部的 java 代码,被翻译为下面的类似于汇编语言的指令

    0 xxxx ....

    2 xxxx ....

    4 xx ...

    5 xxx ...

    }

    上面左边的 0、2、4、5 ,就是类似于字节码的行号(实际是指令的偏移地址),程序计数器中保存中的值,就是它们;字节码解释器,就是根据它们,来执行程序的 ;

    理解了程序计数器,就好理解它的这些特点了;

    我们都知道,java是支持多线程的,当CPU执行权从 A 线程,转移到 B 线程的时候,JVM就要暂时挂起线程 A ,去执行线程 B ;当线程 A 再次得到CPU执行权的时候,又会挂起B线程,继续执行 A 线程 ;

    我们想象下,CPU是怎么知道记住之前A线程,执行到哪一处的?

    答案是,CPU根本就不会记住之前执行到哪里了,它只是埋头苦干;那是什么保证了切换线程的程序可以正常执行的;答案是 : 程序计数器 ;程序计数器里面保存的是 当前线程执行的字节码的行号(看着像行号,其实是指令地址);

    那么,我们需要几个程序计数器呢?如果,我们只有一个的话,切换B线程以后,程序计数器里面保存的就是B线程所执行的字节码的行号了,再切换回A线程,就蒙圈了,不知道执行到哪里了,因为,程序计数器里面保存的是B线程当前执行的字节码地址 ;因此,我们可以想象出,要为每个线程都分配一个程序计数器,因此,程序计数器的内存空间是线程私有的;这样即使线程 A 被挂起,但是线程 A 里面的程序计数器,记住了A线程当前执行到的字节码的指令地址了 ,等再次切回到A线程的时候,看一下程序计数器,就知道之前执行到哪里了!

    那么程序计数器,什么时候分配内存呢?我们试想下,一个线程在执行的任何期间,都会失去CPU执行权,因此,我们要从一个线程被创建开始执行,就要无时无刻的记录着该线程当前执行到哪里了!因此,线程计数器,必须是线程被创建开始执行的时候,就要一同被创建;

    程序计数器,保存的是当前执行的字节码的偏移地址(也就是之前说的行号,其实那不是行号,是指令的偏移地址,只是为了好理解,才说是行号的,),当执行到下一条指令的时候,改变的只是程序计数器中保存的地址,并不需要申请新的内存来保存新的指令地址;因此,永远都不可能内存溢出的;因此,jvm虚拟机规范,也就没有规定,也是唯一一个没有规定 OutOfMemoryError 异常 的区域;;

    当线程执行的是本地方法的时候,程序计数器中保存的值是空(undefined);原因很简单:本地方法是C++/C 写的,由系统调用,根本不会产生字节码文件,因此,程序计数器也就不会做任何记录 ;

    转自:https://blog.csdn.net/youngyouth/article/details/79868299

    展开全文
  • 运行时数据区 – 程序计数器PC 1.理解 我们可以将程序计数器(Program Counter Register)理解为pc计数器、指令计数器、代码行号指示器或者程序钩子。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 2.特性 1) ...
  • 程序计数器PC+1的深刻含义及其实现方法
  • MCS-51指令系统中,执行下列程序后,程序计数器PC的内容为 ORG 000H MOV DPDR,#1000 MOV A, #00H MOV 20H,A LJMP 1500 END
  • 什么是程序计数器程序计数器是一块 较小 的内存空间,它可以看做是当前线程所执行的字节码的 行号指示器 ;在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器...
  • 一、程序计数器PC 程序计数器PC指示的当前要执行的程序在CPU中的地址。 二、寄存器EBP、ESP 每个线程执行时,操作系统会为其分配一个栈帧,存储局部变量、返回地址等要素。 描述这个栈帧用到了两个寄存器: EBP存储...
  • 第一步:手动改变R15(PC程序计数器)的值为0x08000736,函数的执行语句会跳到int b=4所在的211行。 第二步:手动改变R15(PC程序计数器)的值为0x08000738,函数的执行语句会跳到intc=6所在的212行。 如下图所示 ...
  • 程序计数器PC B.指令寄存器IR C.状态寄存器SR D.通用寄存器GR 【歪理邪说】 关键词,“计算机执行程序时”,“首先是将”。 参考答案:A 【知识点】 l程序计数器是什么? 程序计数器是用于存放下一条指令所在...
  • 3、程序计数器r15(PC):PC是有读写限制的。当没有超过读取限制的时候,读取的值是指令的地址加上8个字节,由于ARM指令总是以字对齐的,故bit[1:0]总是00。当用str或stm存储PC的时候,偏移量有可能是8或12等其它值...
  • 此源代码为实验课所授代码,仅以分享的心态上传,与大家一同学习。
  • 看8086框图只有IP,那是不是没有PC?抱歉没分了,,
  • 直接公布答案:PC里的是逻辑地址。MAR里的是物理地址。
  • 深入理解ARM的这三个寄存器,对编程以及操作系统的移植都是必要的。...这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。 2、...
  • 看上去好像功能完全一样,又觉得不应该是一回事,求教
  • 程序计数器 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理...
  • 程序计数器PC寄存器) 1.PC Register 介绍 2.举例说明 3.两个常见问题 CPU时间片
  • PC 程序计数器

    千次阅读 2019-07-02 10:32:08
    单片机中PC程序计数器,是用于存放下一条指令所在单元的地址的地方。 PC值就是程序计数器的值,表示的就是下一条指令所在单元的地址。 当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令...
  • 程序计数器pc寄存器)

    千次阅读 2020-01-23 21:23:20
    程序计数器pc寄存器): pc寄存器 每个线程有一份 作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 pc寄存器它是一块很小的内存空间,几乎可以忽略不记。也是...
  • 自己总结的jvm中程序计数器PC寄存器)的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者
  • 1. 程序计数器JVM 种的程序计数器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,...
  • 程序计数器PC

    千次阅读 2016-03-05 17:48:58
    1.PC中存放下一次访存的地址...大概解释一下程序计数器吧,用一个最简单的例子。 首先第一点:PC中存放的是下一步要访问的内存地址。 如图,这是一个非常非常简单的CPU模型。 一个简单到的只有五条指令In(put)、Ad
  • 程序计数器PC ) 详解

    千次阅读 2020-04-06 12:57:17
    冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器...程序计数器PC )正是起到这种作用,所以通常又...
  • JVM程序计数器PC寄存器)

    千次阅读 2020-09-19 10:25:49
    JVM程序计数器PC寄存器) pc Register介绍 JVM中的程序计数寄存器(Program counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,...
  • PC Register介绍JVM中的程序计数器(Program Counter Register),Resgiter 的命名原于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义所指的物理寄存器,或许将...
  • 04 程序计数器相关知识 PPT,介绍 程序计数器相关概念、作用、存放的内容等。另外还介绍线程的一些基础知识。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,499
精华内容 1,399
关键字:

程序计数器pc