在ARM规定的堆栈中,多寄存器入栈的顺序是什么

2020-11-24 21:03:42 字数 2798 阅读 1921

1楼:du知道君

设堆栈指针r13初始值为#0x50,则: stm指令执行完后堆栈指针r13=( 0x60 )。请在图中标出stm指令执行完后堆栈段的数据存放情况。

ldm指令执行完后堆栈指针r13=( 0x50 ),各寄存器的值分别为: (r1)=( 0x11 ) ,(r2)=( 0x22 ) ,(r3)=( 0x33 ) ,(r4)=( 0x44 ) ,(r5)=( 0x55 )

如何判断堆栈栈满和栈空

2楼:育知同创教育

重新设置堆栈指针

指向新的堆栈

并设置堆栈两端页面为保护页面

一旦堆栈溢出,就会产生保护异常

程序计数器是一个实际存在的寄存器吗

3楼:匿名用户

程序计数器(pc )是计算机处理器中实际存在的寄存器。而且是最重要的寄存器。

它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。

当计算机重启或复位时,程序计数器通常恢复到零。

冯 ·诺伊曼计算机体系结构的主要内容之一就是"程序预存储,计算机自动执行"!处理器要执行的程序(指令序列)都是以二进制**序列方式预存储在计算机的存储器中,处理器将这些**逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,cpu必须具有某些手段来确定下一条取指指令的地址。

程序计数器(pc )正是起到这种作用,所以通常又称之为'指令计数器'。

在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入pc,cpu按照 pc的指示从内存读取第一条指令(取指)。当执行指令时,cpu自动地修改pc的内容,即每执行一条指令pc增加一个量,这个量等于指令所含的字节数(指令字节数),使 pc总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改pc 的过程通常只是简单的对pc 加"指令字节数"。

当遇到转移指令如jmp(跳转、外语全称:jump)指令时,后继指令的地址(即pc的内容)必须从指令寄存器中的地址字段取得。在这种情况下,下一条从内存取出的指令将由转移指令来规定,而不像通常一样按顺序来取得。

因此程序计数器的结构应当是具有寄存信息和计数两种功能的结构。

4楼:南京elite教育

程序计数器只是一个概念而已。程序计数器是用于存放下一条指令所在单元的地址的地方。

当执行一条指令时,首先需要根据pc中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,pc中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。

完成第一条指令的执行,而后根据pc取出第二条指令的地址,如此循环,执行每一条指令。

程序计数器是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。

当计算机重启或复位时,程序计数器通常恢复到零。

冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制**序列方式预存储在计算机的存储器中,处理器将这些**逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,cpu必须具有某些手段来确定下一条取指指令的地址。

程序计数器(pc )正是起到这种作用,所以通常又称之为‘指令计数器’。

在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入pc,cpu按照 pc的指示从内存读取第一条指令(取指)。当执行指令时,cpu自动地修改pc的内容,即每执行一条指令pc增加一个量,这个量等于指令所含的字节数(指令字节数),使 pc总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改pc 的过程通常只是简单的对pc 加“指令字节数”。

当程序转移时,转移指令执行的最终结果就是要改变pc的值,此pc值就是转去的目 标地址。处理器总是按照pc 指向取指、译码、执行,以此实现了程序转移。

5楼:匿名用户

当然是实际存在的,不过一般用户程序不能用它。

程序计数器是一个实际存在的寄存器吗

6楼:乐题库知道问答

在很多微机原理和计算机组成原理书中说每当完成取指令操作后,pc = pc + 1,感觉这个说法不太正确,我的理解是 pc=pc + “取出的指令长度”,比如上一条指令长度为 4 字节,pc=pc+4,这个理解正确吗?又或者比如 mips 指令集的每条指令长均为 4 字节,所以指令地址一定为4的倍数,所以指令地址后两位一定为 0,所以这里的 +1 指代的就是 +4 字节呢?

+1 是指增加一个——概念中的单位。为了方便教学往往说 +1,实际上是增加(一条指令的长度 ÷ 寻址粒度),在 mips 中就是 4,因为 mips 一条指令长度 4 字节,寻址粒度是 1 字节。而 x86 体系的指令长度不定,所以每次增加的量会变化。

还有一个问题就是因为虽说经常听到 pc 这个词,但是我却没有见到其实体,所以我的理解是 pc 实际上就是 cs:ip 组合的逻辑表示。pc 不是一个实体,真正用来表示 pc 值的是 cs:

ip,所谓的 pc 自动增加是指令指针寄存器 ip 在自增?这个理解对吗?

在 x86 体系里是这样。x86 系统中自增的是 ip,用 cs:ip 组合表示正在执行的指令地址,此时 pc 只是一个概念上的说法。

在 arm 体系中 r15 就是 pc,当然 arm 和 ia-32、x64 都支持高级内存管理,所以「pc」的内容未必是当前指令在内存中的绝对位置。