❶ 51单片机 pc怎么算
在51单片机里面,pc永远指向下一条指令的首地址,计算方法就是:当前执行的指令的首地址+本指令所占的字节长度。
❷ 程序存储器2168H地址单元存放双字节指令SJMP,,,52H执行后PC的值是多少
执行之后PC=2168H+2H+52H=21C2H。
❸ 加拿大pc算法教程
1.三级流水线:其实对于PC = PC +8这个问题很简单,这两个PC其实代表着不同的意义,第一个PC是对于CPU而言,而第二个PC而言是我们通过编译器看到的PC(PC指向程序正在运行的那一条指令),但是对于CPU的PC是永远指向取指那个步,故PC = PC +8。
2.五级流水线; ARM9流水线包括取指(fetch)、译码(decode)、执行(excute)、缓冲/数据(buffer/data)、回写(write-back)寄存器堆。ARM9流水线在译码阶段已经开始读取操作数寄存器,因此译码阶段的PC值和取指阶段的PC值关系为:PC(decode)=PC(fetch)+4。因此执行阶段的PC值和译码阶段的PC值关系为:PC(excute)=PC(decode)+4。
3.对于软中断函数的返回时的PC:如下
ARM Thumb
SWI PC-8 PC-4
xxx 》 PC -4 PC-2 (异常返回将执行这条指令)
yyy PC PC
因此返回指令为: MOV PC , LR
原因:异常是由指令本身引起的,因此内核在计算LR时的PC值并没有被更新。对于ARM状态,因为SWI指令表示将跳到异常处理函数,此时SWI这条指令的PC = PC -8,当进入异常处理函数之前,硬件会自动把PC-4保存到LR寄存器中,所以异常处理函数结束后直接MOV PC, LR就行,就会跳到xxx这一条指令去执行。对于Thumb状态同理。
4.对于IRQ和FIQ中断函数返回时的PC:
ARM Thumb
xxx PC-12 PC-6 (程序在运行这条代码时就产生了中断信号)
yyy 》 PC-8 PC-4 (异常返回将执行这条指令)
zzz PC-4 PC-2
www PC PC
返回指令为: SUBS PC, LR, #4
原因:异常在当前指令执行完成后才会被响应,因此内核在计算LR时的PC值已被更新。对于ARM状态,程序在执行xxx这条指令时,中断信号产生,但是由于中断必须在这一条指令执行完之后才会被响应,执行完后,则此时对于CPU的PC已经指向了www这条指令的取指,在中断函数函数时应该执行yyy这条指令,虽然硬件会把PC-4的值赋值给LR寄存器,但是这是指向zzz这条指令的,所以返回时应该SUBS PC, LR, #4。对于Thumb状态同理。
❹ 在汇编语言写单片机的程序的时候,如何知道当前的PC指针是多少
当前PC指针的值,可以通过一定的方法来获得,比如如果使用LCALL指令,那么单片机执行过程是:保护现场,将当前PC压入堆栈,当程序返回时,再弹出该保护的PC,由此,我们就可以获得当前的PC,具体程序如下:
........
LCALL GETPC ;调用一个子程序以获得当前PC值
...........
GETPC:
POP ACC ;取得PC高八位
POP B ;取得PC低八位
PUSH B ;恢复SP
PUSH ACC ;恢复SP
......
RET
❺ MCS51单片机AJMP指令执行后PC的值如何计算
AJMP 占用2个字节,所以如果你问的是 AJMP后面一行的指令PC的话,就是当前值+2.
❻ 分析一下程序,执行完以后pc的值为多少
所以第一次执行djnz r0,ll后r0=ffh=255,则程序要执行的次数为256次,r0最后的值为0。解:程序要循环的次数为256@a+pc指令需注意两点:1)指令中的pc是执行完本条指令后的pc值,即pc等于本条指令地址加1。2)a是修正值,它等于查表
❼ 汇编语言中PC寄存器的计算
1)现在的CPU都是预取指令的,PC值不是当前指令的PC值,而是下一条(或者下几条)指令的PC值;
2)#24,似乎应该是十进制的;
3)你单步运行,看看PC寄存器的值吧;
❽ 单片机pc值怎么计算。
先找到当前指令下一条指令的PC值,再加上相对偏移量rel。
PC是一个16位的计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。
❾ 单片机里面的pc值是什么意思
pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:
例如:
(A)=50H;
sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次,即地址出栈,故最终结果是50h。
(51h)=30h;
(52h)=50h;
因为ret指令返回时,出栈的结果是高地址=(52h)=50h;而低地址=(51h)=30h;故最终结果pc值是5030h;
(9)如何求程序执行后的pc值扩展阅读
单片机在电子技术中的开发,主要包括CPU开发、程序开发、 存储器开发、计算机开发及C语言程序开发,同时得到开发能够保证单片机在十分复杂的计算机与控制环境中可以正常有序的进行,这就需要相关人员采取一定的措施,下文是笔者的一些简单介绍:
(1)CPU开发。开发单片机中的CPU总线宽度,能够有效完善单片机信息处理功能缓慢的问题,提高信息处理效率与速度,开发改进中央处理器的实际结构,能够做到同时运行2-3个CPU,从而大大提高单片机的整体性能。
(2)程序开发。嵌入式系统的合理应用得到了大力推广,对程序进行开发时要求能够自动执行各种指令,这样可以快速准确地采集外部数据,提高单片机的应用效率。
(3)存储器开发。单片机的发展应着眼于内存,加强对基于传统内存读写功能的新内存的探索,使其既能实现静态读写又能实现动态读写,从而显着提高存储性能。
(4)计算机开发。进一步优化和开发单机片应激即分析,并应用计算机系统,通过连接通信数据,实现数据传递。
(5)C语言程序开发。优化开发C语言能够保证单片机在十分复杂的计算机与控制环境中,可以正常有序的进行,促使其实现广泛全面的应用。
❿ 51单片机的 pc值怎么算
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )
pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:
(A)=50H;
sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次,即地址出栈,故最终结果是50h。
(51h)=30h;
(52h)=50h;
因为ret指令返回时,出栈的结果是高地址=(52h)=50h;而低地址=(51h)=30h;故最终结果pc值是5030h;
(10)如何求程序执行后的pc值扩展阅读:
51单片机功能特性
1、可以仿真63K程序空间,接近64K 的16位地址空间;
2、可以仿真64Kxdata 空间,全部64K 的16位地址空间;
3、可以真实仿真全部32 条IO脚;
4、完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;
5、可以使用C51语言或者ASM汇编语言进行调试 ;
6、可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
7、可选 使用用户晶振,支持0-40MHZ晶振频率;
8、片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真;
9、可以仿真双DPTR 指针;
10、可以仿真去除ALE 信号输出. ;
11、自适应300-38400bps 的所有波特率通讯;
12、体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障;
13、仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. ;
14、仿真时监控和用户代码分离,不可能产生不能仿真的软故障;
15、RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。