




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章章 Cortex-M3 指令系统指令系统第第3章章 Cortex-M3 指令系统指令系统23.1 指令基础3.2 汇编语言3.3 寻址方式3.4 指令集3.1 指令基础3.1.1程序设计语言的层次结构程序设计语言的层次结构3.1.2指令周期和时序指令周期和时序3.1.3程序的执行过程程序的执行过程第第3章章 Cortex-M3 指令系统指令系统用用 户户 层层高高 级级 语语 言言 层层汇汇 编编 语语 言言 层层操操 作作 系系 统统 层层 机机 器器 层层控控 制制 层层数数 字字 电电 路路 层层 应用软件应用软件 系统软件系统软件 软硬件界面软硬件界面物理机物理机虚拟机虚拟机硬
2、件硬件固件固件硬件直接执行硬件直接执行Level 0 (门电路、电子线路门电路、电子线路)Level 1 (微程序或硬布线微程序或硬布线)Level 2 (指令集结构指令集结构ISA)Level 3 (操作系统、库代码操作系统、库代码)Level 4 (汇编语言代码汇编语言代码)Level 5 (C+,Java,等,等)Level 6 (可执行程序可执行程序)3.1.1程序设计语言的层次结构程序设计语言的层次结构计算机程序设计语言的层次结构如图计算机程序设计语言的层次结构如图3-1所示,分为机器所示,分为机器语言级、汇编语言级、高级语言级语言级、汇编语言级、高级语言级。机器语言是与计算机硬件最
3、为密切的一种语言,它由微程机器语言是与计算机硬件最为密切的一种语言,它由微程序解释机器指令。这一级也是硬件级,是软件系统和硬件序解释机器指令。这一级也是硬件级,是软件系统和硬件系统之间的纽带。系统之间的纽带。 图3-1程序设计语言的层次结构为了提高程序设计的效率,提出了汇编语言的概念。将机器码为了提高程序设计的效率,提出了汇编语言的概念。将机器码用指令助记符表示,就比机器语言方便得多。用指令助记符表示,就比机器语言方便得多。汇编语言的编程效率和程序的可读性都有所提高,但汇编语言汇编语言的编程效率和程序的可读性都有所提高,但汇编语言同机器语言非常接近,它的书写风格在很大程度上取决于特定同机器语言
4、非常接近,它的书写风格在很大程度上取决于特定计算机的机器指令,所以它仍然是一种面向机器的语言。计算机的机器指令,所以它仍然是一种面向机器的语言。 3.1.1程序设计语言的层次结构程序设计语言的层次结构为了更好地进行程序设计,提高程序设计的效率,人们又提出为了更好地进行程序设计,提高程序设计的效率,人们又提出了高级语言程序设计的概念。如了高级语言程序设计的概念。如C、JAVA等,这类高级语言等,这类高级语言对问题的描述十分接近人们的习惯,并且还具有较强的通用性对问题的描述十分接近人们的习惯,并且还具有较强的通用性。这就给程序员带来极大的方便。这就给程序员带来极大的方便。当然这类高级语言在执行前必
5、须转换为汇编语言或其它中间语当然这类高级语言在执行前必须转换为汇编语言或其它中间语言,最终转换为机器语言。通常有两种方法实现这个转换:编言,最终转换为机器语言。通常有两种方法实现这个转换:编译或解释。译或解释。73.1.1程序设计语言的层次结构程序设计语言的层次结构第第3章章 Cortex-M3 指令系统指令系统高级语言(高级语言(High Level Language)n面向问题的程序设计语言汇编语言(汇编语言(Assembly Language)n将机器指令用助记符号代替而形成的一种语言n本质上是机器语言n优势:可以直接、有效地控制计算机硬件,容易产生运行速度快、指令序列短小的高效率目标程
6、序n劣势:与处理器密切有关,需熟悉硬件和细节,编程繁琐,调试、维护、移植困难机器语言(机器语言(Machine Language)n底层的计算机语言,对应机器指令3.1.2 指令周期和时序指令周期和时序指令周期(指令周期(Instruction Cycle):微处理器执行一条指令所需要微处理器执行一条指令所需要的时间的时间。不同指令的指令周期不是等长的不同指令的指令周期不是等长的 。如果要处理的数据在微处理器的寄存器中,则需要的时间短;如果要处理的数据在微处理器的寄存器中,则需要的时间短;如果要处理的数据在存储器或如果要处理的数据在存储器或I/O设备中则需要的时间长设备中则需要的时间长。一般情
7、况下,以访问存储器所需最长的时间来衡量指令周期。一般情况下,以访问存储器所需最长的时间来衡量指令周期。 举例:以举例:以ARM7微处理器微处理器为例为例,所有存储器的传输周期都可以被,所有存储器的传输周期都可以被归结到以下四种类型之一:归结到以下四种类型之一:(1)不连续周期:不连续周期:ARM请求传输到某个地址或者从某个地址传输请求传输到某个地址或者从某个地址传输,但这个地址跟前一个周期用到的地址没有联系,这种情况所,但这个地址跟前一个周期用到的地址没有联系,这种情况所需的时间称为访问一个非顺序的内存位置的周期,简称为需的时间称为访问一个非顺序的内存位置的周期,简称为N 周周期。期。(2)连
8、续周期:连续周期:ARM请求传输到某个地址或者从某个地址传输,请求传输到某个地址或者从某个地址传输,此地址或者同上一个周期的地址相同或者是上一个周期的地址此地址或者同上一个周期的地址相同或者是上一个周期的地址之后一个字。这种情况所需的时间称为访问一个顺序的内存位之后一个字。这种情况所需的时间称为访问一个顺序的内存位置的周期,简称为置的周期,简称为S 周期。周期。103.1.2 指令周期和时序指令周期和时序(3)内部周期:内部周期:ARM不请求一个传输,因为它执行一个内部功能,不请求一个传输,因为它执行一个内部功能,同时不执行有效的预取。这种情况所需的时间称为内部周期,简同时不执行有效的预取。这
9、种情况所需的时间称为内部周期,简称为称为I 周期。周期。(4)协处理器寄存器传输周期:协处理器寄存器传输周期:ARM希望通过数据总线同协处理器希望通过数据总线同协处理器通信,通信,ARM 与一个协处理器之间在数据总线与一个协处理器之间在数据总线(对于无缓存的对于无缓存的 ARM)或协处理器总线或协处理器总线(对于有缓存的对于有缓存的 ARM)上写传送一个字的周上写传送一个字的周期,简称期,简称C 周期。周期。3.1.2 指令周期和时序指令周期和时序ARM 指令在时序上是指令在时序上是 S、N、I 和和 C 周期的混合。各种类型的周周期的混合。各种类型的周期都必须至少与期都必须至少与 ARM 的
10、时钟周期一样长。的时钟周期一样长。对于典型的对于典型的 SRAM 系统,所有类型的周期是最小长度,内存系统系统,所有类型的周期是最小长度,内存系统也可以伸展它们,如典型的也可以伸展它们,如典型的 DRAM 系统伸展如下:系统伸展如下: N 周期伸展为最小长度的两倍周期伸展为最小长度的两倍,这是因为这是因为 DRAM 在内存访问是非在内存访问是非顺序时要求更长的时间。顺序时要求更长的时间。S 周期通常是最小长度,但有时也会被伸展成周期通常是最小长度,但有时也会被伸展成 N 周期的长度,如周期的长度,如从一个内存从一个内存“行行”的最后一个字移动到下一行的第一个字时。的最后一个字移动到下一行的第一
11、个字时。 I 周期和周期和 C 周期总是最小长度。周期总是最小长度。 3.1.2 指令周期和时序指令周期和时序例如:在例如:在8MHz的的ARM微处理器中,一个微处理器中,一个 S 周期是周期是125ns,而一,而一个个 N 周期是周期是 250ns。一个。一个 8MHz的的ARM微处理器可以与一个给微处理器可以与一个给出出125ns 的的 N 周期的周期的 RAM 系统相连接。系统相连接。处理器的速率是处理器的速率是 8MHz 只是简单的意味着如果你使任何类型的只是简单的意味着如果你使任何类型的周期,在长度上小于周期,在长度上小于 125ns 则它不保证能够工作。则它不保证能够工作。图3-2
12、 存储器访问时序 其中N-cycle比其它的周期长,这考虑了对DRAM的访问时间。 3.1.2 指令周期和时序指令周期和时序3.1.3 程序的执行过程程序的执行过程CPU通过数据总线、地址总线、控制总线和存储器、外部通过数据总线、地址总线、控制总线和存储器、外部I/O设备联系起来。设备联系起来。计算机采取计算机采取“存储程序与程序控制存储程序与程序控制”的工作方式,即事先把的工作方式,即事先把程序加载到计算机的存储器中,当启动运行后,计算机会自程序加载到计算机的存储器中,当启动运行后,计算机会自动按照存储程序的要求进行工作,这称为程序控制。动按照存储程序的要求进行工作,这称为程序控制。 图3-
13、3计算机程序的执行过程3.1.3 程序的执行过程程序的执行过程计算机执行程序是一条指令一条指令地执行。执行一条指令的过计算机执行程序是一条指令一条指令地执行。执行一条指令的过程可分为取指、译码和执行等阶段。程可分为取指、译码和执行等阶段。首先,首先,CPU进入取指阶段,通过控制总线(进入取指阶段,通过控制总线(CB)发出读命令,)发出读命令,并在地址总线上(并在地址总线上(AB)给出所取指令的地址,从存储器中取出)给出所取指令的地址,从存储器中取出的指令代码经过数据总线(的指令代码经过数据总线(DB)送到)送到CPU的指令寄存器中,的指令寄存器中,然后对该指令译码,再转入执行阶段,在这期间,然
14、后对该指令译码,再转入执行阶段,在这期间,CPU执行指令执行指令指定的操作。指定的操作。 3.2 ARM汇编语言汇编语言3.2.1 指令和指令格式指令和指令格式3.2.2 指令的可选后缀指令的可选后缀3.2.3 指令的条件执行指令的条件执行3.2.4 指令分类指令分类3.2.1指令和指令格式1. 指令和指令系统指令和指令系统指令指令:指示计算机进行某种操作的命令指示计算机进行某种操作的命令。 指令系统指令系统:指令的集合。指令的集合。指令系统的功能强弱在很大程度上决定了这类计算机智能的高指令系统的功能强弱在很大程度上决定了这类计算机智能的高低,它集中地反映了微处理器的硬件功能和属性。低,它集中
15、地反映了微处理器的硬件功能和属性。3.2.1指令和指令格式2. 指令的表示方法指令的表示方法从形式上看,从形式上看,ARM指令在机器中的表示格式是用指令在机器中的表示格式是用32位的二进制数位的二进制数表示。如表示。如ARM中有一条指令为:中有一条指令为: ADDEQS R0, R1, #8其二进制代码形式为:其二进制代码形式为:3128 2725 2421 2019161512 110 00000010100100010000000000001000 conedopcode RnRd Op2 ARM指令代码一般可以分为指令代码一般可以分为5个域:个域:第第1个域是个域是4位位31:28的条件
16、码域,的条件码域,4位条件码共有位条件码共有16种组合;种组合;第第2个域是指令代码域个域是指令代码域27:20,除了指令编码外,还包含几个很重除了指令编码外,还包含几个很重要的指令特征和可选后缀的编码;要的指令特征和可选后缀的编码;第第3个域是地址基址个域是地址基址Rn,是,是4位位19:16,为为R0R15共共16个寄存器个寄存器编码;编码;第第4个域是目标或源寄存器个域是目标或源寄存器Rd,是,是4位位15:12,为为R0R15共共16个个寄存器编寄存器编 码;码;第第5个域是地址偏移或操作寄存器、操作数区个域是地址偏移或操作寄存器、操作数区11:0。3.2.1指令和指令格式3. 汇编指
17、令格式汇编指令格式用助记符表示的用助记符表示的ARM指令一般格式如下:指令一般格式如下: S, , 格式中格式中的内容必不可少,的内容必不可少, 中的内容可省略。中的内容可省略。如如是指令助记符,是必须的。而是指令助记符,是必须的。而为指令的执为指令的执行条件,是可选的,缺省的情况下表示使用默认条件行条件,是可选的,缺省的情况下表示使用默认条件AL(无条无条件执行件执行)。3.2.1指令和指令格式 表示操作码,如表示操作码,如ADD表示算术加法。表示算术加法。 表示指令执行的条件域,如表示指令执行的条件域,如EQ、NE等。等。 S决定指令的执行结果是否影响决定指令的执行结果是否影响APSR的值
18、,使用该后缀则的值,使用该后缀则指令执行的结指令执行的结 果影响果影响APSR的值,否则不影响。的值,否则不影响。 表示目的寄存器。表示目的寄存器。 表示第一个操作数,为寄存器。表示第一个操作数,为寄存器。 表示第二个操作数,可以是立即数、寄存器和寄存器移表示第二个操作数,可以是立即数、寄存器和寄存器移位操作数。位操作数。 3.2.1指令和指令格式例如:例如: 上述指令上述指令ADDEQS R0,R1,#8; 操作码为操作码为ADD, 条件域条件域cond为为EQ, S表示该指令的执行影响表示该指令的执行影响APSR寄存器的值,寄存器的值, 目的寄存器目的寄存器Rd为为R0, 第一个操作数寄存
19、器第一个操作数寄存器Rn为为R1, 第二个操作数第二个操作数OP2为立即数为立即数8。223.2.1指令和指令格式例例3.1 指令格式举例:指令格式举例: LDR R0,R1 ;读取;读取R1地址上的存储单元的数据到寄存器地址上的存储单元的数据到寄存器R0 BEQ ENDDATA ;条件分支执行指令,执行条件;条件分支执行指令,执行条件EQ,即相,即相等则跳转到等则跳转到ENDDATA处处 ADDS R2,R1,#1 ;寄存器;寄存器R1中的内容加中的内容加1存入寄存器存入寄存器R2,并,并影响影响APSR寄存器的值寄存器的值233.2.1指令和指令格式3.2.2指令的可选后缀指令的可选后缀
20、1. S后缀后缀 指令中使用指令中使用S后缀时,指令执行后程序状态寄存器的条件标后缀时,指令执行后程序状态寄存器的条件标志位将被刷新,不使用志位将被刷新,不使用S后缀时,指令执行后程序状态寄存后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。器的条件标志将不会发生变化。 S后缀通常用于对条件进行测试,例如是否有溢出,是否进后缀通常用于对条件进行测试,例如是否有溢出,是否进位等;根据这些变化,就可以进行一些判断,如是否大于,位等;根据这些变化,就可以进行一些判断,如是否大于,是否相等;从而可能影响指令执行的顺序。是否相等;从而可能影响指令执行的顺序。 3.2.2指令的可选后缀指令的可选后
21、缀例例 3.2 假设假设R0=0 x1,R3=0 x3,指令执行之前指令执行之前APSR=nzcvqIFt_SVC,分别执行如下指令分别执行如下指令APSR的值有何变化?的值有何变化? SUB R1,R0,R3 ;R0的值减去的值减去R3的值,结果存入的值,结果存入R1 SUBS R1,R0,R3 ;R0的值减去的值减去R3的值,结果存入的值,结果存入R1,影响,影响标志位。标志位。分析:执行第分析:执行第1条指令对于标志寄存器的值没有任何影响,因此条指令对于标志寄存器的值没有任何影响,因此CPSR的值不变。执行第的值不变。执行第2条指令后条指令后APSR=NzcvqIFt_SVC,因为因为R
22、0的值减去的值减去R3值,结果变成了一个负数,故而值,结果变成了一个负数,故而N被置位了。被置位了。 2. !后缀后缀 如果指令地址表达式中不含!后缀,则基址寄存器中的地址如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。值不会发生变化。 指令中的地址表达式中含有指令中的地址表达式中含有!后缀时,指令执行后,基址寄存后缀时,指令执行后,基址寄存器中的地址值将发生变化,变化的结果如下:器中的地址值将发生变化,变化的结果如下: 基址寄存器中的值(指令执行后)指令执行前的值地址偏移基址寄存器中的值(指令执行后)指令执行前的值地址偏移量量 3.2.2指令的可选后缀指令的可选后缀3.2
23、.2 指令的可选后缀指令的可选后缀例例 3.3 分别执行下面两条指令有何区别?分别执行下面两条指令有何区别? LDR R3,R0,#4 LDR R3,R0,#4!分析:在上述指令中,第分析:在上述指令中,第1条指令没有后缀!,指令的结果是把条指令没有后缀!,指令的结果是把R0加加4作为地址指针,把这个指针所指向的地址单元所存储作为地址指针,把这个指针所指向的地址单元所存储的数据读入的数据读入R3,R0的值不变。第的值不变。第2条指令除了实现以上操作条指令除了实现以上操作外,还把外,还把R04的结果送到的结果送到R0中。中。 3.2.2 指令的可选后缀指令的可选后缀使用使用!后缀需要注意如下事项
24、:后缀需要注意如下事项: (1)!后缀必须紧跟在地址表达式后面,而地址表达式要有明确的!后缀必须紧跟在地址表达式后面,而地址表达式要有明确的地址偏移量;地址偏移量;(2)! 后缀不能用于后缀不能用于R15(PC)的后面;的后面;(3)当用在单个地址寄存器后面时,必须确信这个寄存器有隐性的当用在单个地址寄存器后面时,必须确信这个寄存器有隐性的偏移量,例如偏移量,例如“STMDB R1!R3,R5,R7”此时地址基址寄存器此时地址基址寄存器R1的隐性偏移量是的隐性偏移量是4。3.2.3指令的条件执行指令的条件执行程序要执行的指令,均保存在存储器中,当计算机需要执行程序要执行的指令,均保存在存储器中
25、,当计算机需要执行一条指令时,首先产生这条指令的地址,并根据地址号打开一条指令时,首先产生这条指令的地址,并根据地址号打开相应的存储单元,取出指令代码,相应的存储单元,取出指令代码,CPU根据指令代码的要求根据指令代码的要求以及指令中的操作数,去执行相应的操作。以及指令中的操作数,去执行相应的操作。表3-2指令的条件码3.2.3指令的条件执行指令的条件执行例例 3.4 下面三条指令有何区别?下面三条指令有何区别? ADD R4,R3,#1 ADDEQ R4,R3,#1 ADDS R4,R3,#1分析:第分析:第1条指令不带条件标志(无条件条指令不带条件标志(无条件AL),指令的执行不受),指令
26、的执行不受条件标志位的影响,完成加法运算:将条件标志位的影响,完成加法运算:将R3的值加的值加1存入寄存器存入寄存器R4。第。第2条条 ADD指令加上后缀指令加上后缀EQ变为变为ADDEQ表示表示“相等则相相等则相加加”,即当,即当APSR中的中的Z标志置位时该指令执行,否则不执行。标志置位时该指令执行,否则不执行。第第3条指令的执行也不受条件标志的影响,但是由于附带了后条指令的执行也不受条件标志的影响,但是由于附带了后缀缀S,这条指令执行的结果将影响,这条指令执行的结果将影响APSR中条件标志位的值。中条件标志位的值。 3.2.3指令的条件执行指令的条件执行条件后缀只是影响指令是否执行,不影
27、响指令的内容,如上条件后缀只是影响指令是否执行,不影响指令的内容,如上述述ADDEQ指令,可选后缀指令,可选后缀EQ并不影响本指令的内容,它执并不影响本指令的内容,它执行时仍然是一条加法指令。行时仍然是一条加法指令。3.2.3指令的条件执行指令的条件执行条件后缀和条件后缀和S后缀的关系如下:后缀的关系如下:(1)如果既有条件后缀又有)如果既有条件后缀又有S后缀,则书写时后缀,则书写时S排在后面,排在后面,如:如:ADDEQS R1,R0,R2该指令在该指令在Z=1时执行,将时执行,将R0+R2的值放入的值放入R1,同时刷新条件标,同时刷新条件标志位。志位。(2)条件后缀是要测试条件标志位,而)
28、条件后缀是要测试条件标志位,而S后缀是要刷新条件标后缀是要刷新条件标志位。志位。(3)条件后缀要测试的是执行前的标志位,而)条件后缀要测试的是执行前的标志位,而S后缀是依据指后缀是依据指令的结果改变条件标志。令的结果改变条件标志。3.2.3指令的条件执行指令的条件执行3.2.4 ARM指令分类指令分类ARM微处理器的指令集是加载微处理器的指令集是加载/存储型的,即指令集中的大部存储型的,即指令集中的大部分指令仅能处理寄存器中的数据,而且处理结果都要放回寄分指令仅能处理寄存器中的数据,而且处理结果都要放回寄存器,而对系统存储器的访问则需要通过专门的加载存器,而对系统存储器的访问则需要通过专门的加
29、载/存储指存储指令来完成。令来完成。ARM微处理器的指令集可以分为数据处理指令、数据加载与微处理器的指令集可以分为数据处理指令、数据加载与存储指令、分支指令、程序状态寄存器(存储指令、分支指令、程序状态寄存器(PSR)处理指令、)处理指令、协处理器指令和异常产生指令协处理器指令和异常产生指令等等。 第第3章章 Cortex-M3 指令系统指令系统统一汇编语言书写语法统一汇编语言书写语法ARM 汇编器引了一个汇编器引了一个“统一汇编语言(统一汇编语言(UAL)”语法机制。语法机制。对于对于 16 位指令和位指令和 32 位指令,汇编器允许开发者统一使用位指令,汇编器允许开发者统一使用 32 位位
30、 Thumb-2 指令的语法格式书写(很多指令的语法格式书写(很多 Thumb-2 指令指令的用法也与的用法也与 32 位位 ARM 指令相同),并且由汇编器来决定指令相同),并且由汇编器来决定是使用是使用 16 位指令,还是使用位指令,还是使用 32 位指令。位指令。以前,以前,Thumb 的语法和的语法和 ARM 的语法不同,在有了的语法不同,在有了 UAL 之后之后,两者的书写格式就统一了。,两者的书写格式就统一了。 35第第3章章 Cortex-M3 指令系统指令系统例如:例如:ADD R0, R1 ; 使用传统的使用传统的Thumb语法语法 ADD R0, R0, R1 ; 引入引入
31、UAL后允许的等效写法(后允许的等效写法(R0=R0+R1) 36第第3章章 Cortex-M3 指令系统指令系统注意问题:注意问题:虽然引入了虽然引入了 UAL,但是仍然允许使用传统的,但是仍然允许使用传统的 Thumb 语法。语法。如果使用传统的如果使用传统的 Thumb 语法,有些指令会默认地更新语法,有些指令会默认地更新 APSR,即使没有加上,即使没有加上 S 后缀。如果使用后缀。如果使用 UAL 语法,则必须指定语法,则必须指定 S 后缀才会更新。绝大多数后缀才会更新。绝大多数 16位指令只能访问位指令只能访问 R0-R7;32位位 Thumb-2指令则可以随意访问指令则可以随意访
32、问 R0-R15。在在 Thumb-2 指令集中,有些操作既可以由指令集中,有些操作既可以由 16 位指令完成,也位指令完成,也可以由可以由 32 位指令完成。在位指令完成。在 UAL 下,汇编器能主动决定用哪下,汇编器能主动决定用哪个,也可以手工指定是用个,也可以手工指定是用 16 位的还是位的还是 32 位的。位的。37第第3章章 Cortex-M3 指令系统指令系统例如:例如:ADDS R0, #1 ; 汇编器将为了节省空间而使用汇编器将为了节省空间而使用16位指令位指令 ADDS.N R0, #1 ;指定使用指定使用16位指令(位指令(NNarrow) ADDS.W R0, #1 ;指
33、定使用指定使用32位指令(位指令(W=Wide) .W后缀指定后缀指定 32 位指令。如果没有给出后缀,汇编器会先试着用位指令。如果没有给出后缀,汇编器会先试着用 16 位指令以给代码瘦身,如果不行再使用位指令以给代码瘦身,如果不行再使用 32 位指令。位指令。.N后缀指定后缀指定 16 位指令,其实是多此一举,不过汇编器可能仍然位指令,其实是多此一举,不过汇编器可能仍然允许这样的语法允许这样的语法。 383.3 指令的寻址方式指令的寻址方式3.3.1 立即数寻址立即数寻址3.3.2 寄存器寻址寄存器寻址3.3.3 寄存器间接寻址寄存器间接寻址3.3.4 寄存器移位寻址寄存器移位寻址3.3.5
34、 基址变址寻址基址变址寻址3.3.6 多寄存器寻址多寄存器寻址3.3.7 相对寻址相对寻址3.3.8 堆栈寻址堆栈寻址3.3.1立即数寻址立即数寻址立即数寻址也叫立即寻址,操作数本身就在指令中给出,取立即数寻址也叫立即寻址,操作数本身就在指令中给出,取出指令也就取到了操作数。这个操作数被称为立即数,对应出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址的寻址方式也就叫做立即寻址例例 3.5 MOV R0,#15此指令是将立即数此指令是将立即数15传送到传送到R0中,该指令的机器编码为中,该指令的机器编码为E3A0000FH,由指令编码中,由指令编码中0 x00F即可
35、得到一个即可得到一个32位的立即位的立即0 x0000000FH,这个数再送入,这个数再送入R0立即数要求以立即数要求以“”为前缀,为前缀,对于以十六进制表示的立即数,还要求在对于以十六进制表示的立即数,还要求在“”后加上后加上“0 x”或或“&”;对于以二进制表示的立即数,要求在对于以二进制表示的立即数,要求在“#”后加上后加上“0b”; 对于以十进制表示的立即数,要求在对于以十进制表示的立即数,要求在“#”后加上后加上“0d”或缺省。或缺省。3.3.1立即数寻址立即数寻址3.3.2寄存器寻址寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方寄存器寻址就是利用寄存器中的
36、数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式较高的寻址方式。例例 3.6 ADD R0,R1,R2 ;R0R1R23.3.3寄存器间接寻址寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。作数本身存放在存储器中。 例例 3.7 LDR R0,R4 ;R0R4 3.3.4寄存器移位寻址寄存器移位寻址寄存器移位寻址的操作数由寄存器中的数值做相应移位而得到寄存器移位寻址的操作数由寄存器中的数值做相应移位而得
37、到。 例例 3.8 ADD R0,R1,R2,LSL #1 MOV R0,R1,LSL R3 3.3.5基址变址寻址基址变址寻址基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。有效地址。 例例 3.9 LDR R0,R1,4 ;R0R14 LDR R0,R1,4! ;R0R14、R1R14 LDR R0,R1,4 ;R0R1、R1R14 LDR R0,R1,R2 ;R0R1R2 3.3.6多寄存器寻址多寄存器寻址采
38、用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式中用一条指令最多可传送这种寻址方式中用一条指令最多可传送16个通用寄存器的值。连个通用寄存器的值。连续的寄存器间用续的寄存器间用“-”连接,否则用连接,否则用“,”分隔。分隔。 例例 3.10 LDMIA R0!,!,R1-R4 ;R1R0 ;R2R04 ;R3R08 ;R4R012 指令执行后内存和寄存器值指令执行前内存和寄存器值3.3.6多寄存器寻址多寄存器寻址3.3.7相对寻址相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器与基址变址寻址方式相类似,相对寻址
39、以程序计数器PC的当前的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。得到操作数的有效地址。 以下程序段完成子程序的调用,分支指令以下程序段完成子程序的调用,分支指令BL采用了相对寻址方采用了相对寻址方式:式: BL proc ;跳转到子程序;跳转到子程序proc处执行处执行 proc MOV R0,#1 3.3.8堆栈寻址堆栈寻址堆栈是一种数据结构,按后进先出(堆栈是一种数据结构,按后进先出(Last In First Out, LIFO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当)的方式工作,使
40、用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。前的操作位置,堆栈指针总是指向栈顶。 采用采用POP操作(出栈)和操作(出栈)和PUSH操作(进栈),操作(进栈),R13作为堆栈指作为堆栈指针。针。 第第3章章 Cortex-M3 指令系统指令系统数据传送数据传送数据处理数据处理子程呼叫与无条件跳转指令子程呼叫与无条件跳转指令标志位与条件转移标志位与条件转移指令隔离指令隔离(barrier)指令和存储器隔离指令指令和存储器隔离指令饱和运算饱和运算其他指令其他指令503.4指令集指令集第第3章章 Cortex-M3 指令系统指令系统CM3 中的数据传送类型包括:中的数据传
41、送类型包括: 寄存器间数据传送寄存器间数据传送寄存器与存储器间数据传送寄存器与存储器间数据传送 堆栈操作指令堆栈操作指令寄存器与特殊功能寄存器间数据传送寄存器与特殊功能寄存器间数据传送立即数加载到寄存器立即数加载到寄存器 513.4指令集指令集数据传送数据传送第第3章章 Cortex-M3 指令系统指令系统寄存器间数据传送寄存器间数据传送用于在寄存器间传送数据的指令是用于在寄存器间传送数据的指令是 MOV。例如,例如,MOV R8, R3;要把;要把 R3 的数据传送给的数据传送给 R8MOV 的一个衍生物是的一个衍生物是 MVN,它把寄存器的内容取反后再传送,它把寄存器的内容取反后再传送。5
42、23.4指令集指令集数据传送数据传送1MOV指令指令 汇编格式:汇编格式:MOV S Rd,operand2 功功 能:能:MOV指令将源操作数指令将源操作数operand2传送到目的寄存器传送到目的寄存器Rd中。通常中。通常 operand2是一个立即数、寄存器是一个立即数、寄存器Rm或被移位的寄或被移位的寄存器。存器。S选项决定指令的操作是否影响选项决定指令的操作是否影响CPSR中条件标志位的值中条件标志位的值,有,有S时指令执行后的结果影响时指令执行后的结果影响CPSR中条件标志位中条件标志位N和和Z值,在值,在计算第计算第2操作数时更新标志操作数时更新标志C,不影响,不影响V标志标志。
43、例例 3.12 MOV指令示例:指令示例: MOV R1,R0 ;将寄存器;将寄存器R0的值传送到寄存器的值传送到寄存器R1 MOV PC,R14 ;将寄存器;将寄存器R14的值传送到的值传送到PC,常用于,常用于子程序返回子程序返回 MOV R1,R0,LSL3 ;将寄存器;将寄存器R0的值左移的值左移3位后传送位后传送到到R1 MOV R0,#5 ;将立即数;将立即数5传送到寄存器传送到寄存器R02MVN指令指令 汇编格式汇编格式:MVNS Rd,operand2 功功 能能:MVN指令可完成从另一个寄存器、被移位的寄存器或指令可完成从另一个寄存器、被移位的寄存器或将一个立即数传送到目的寄
44、存器将一个立即数传送到目的寄存器Rd。与。与MOV指令不同之处是指令不同之处是:数数据在传送之前被按位取反了,即把一个被取反的值传送到目的寄据在传送之前被按位取反了,即把一个被取反的值传送到目的寄存器中。存器中。S选项决定指令的操作是否影响选项决定指令的操作是否影响CPSR中条件标志位的值,有中条件标志位的值,有S时时指令执行后的结果影响指令执行后的结果影响CPSR中条件标志位中条件标志位N和和Z值,在计算第值,在计算第2操作数时更新标志操作数时更新标志C,不影响,不影响V标志。标志。例例 3.13 MVN指令示例:指令示例: MVN R0,0 ;将立即数;将立即数0取反传送到寄存器取反传送到
45、寄存器R0中,完成中,完成后后R0=-1 MVN R1,R2 ;将;将R2取反,结果存到取反,结果存到R1中中56第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送用于访问存储器的基础指令是用于访问存储器的基础指令是“加载(加载(Load)”和和“存储(存储(Store)”。加载指令加载指令 LDR:把存储器中的内容加载到寄存器中。:把存储器中的内容加载到寄存器中。存储指令存储指令 STR:把寄存器的内容存储至存储器中。:把寄存器的内容存储至存储器中。传送过程中数据类型也可以变通。传送过程中数据类型也可以变通。573.4指令集指令集数据传送数据传送
46、第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送583.4指令集指令集数据传送数据传送示例 功能描述 LDRB Rd, Rn, #offset 从地址 Rn+offset 处读取一个字节送到 Rd LDRH Rd, Rn, #offset 从地址 Rn+offset 处读取一个半字送到 Rd LDR Rd, Rn, #offset 从地址 Rn+offset 处读取一个字送到 Rd LDRD Rd1, Rd2, Rn, #offset 从地址 Rn+offset 处读取一个双字(64 位整数)送到 Rd1(低 32 位)和 Rd2(高 32 位)
47、中。 STRB Rd, Rn, #offset 把 Rd 中的低字节存储到地址 Rn+offset 处 STRH Rd, Rn, #offset 把 Rd 中的低半字存储到地址 Rn+offset 处 STR Rd, Rn, #offset 把 Rd 中的低字存储到地址 Rn+offset 处 STRD Rd1, Rd2, Rn, #offset 把 Rd1(低 32 位)和 Rd2(高 32 位)表达的双字存储到地址 Rn+offset 处 第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送可以使用可以使用 LDMxy/STMxy ,一次传输更多
48、数据。,一次传输更多数据。X:可以为可以为I或或D,I表示自增,表示自增,D表示自减表示自减Y:可以为可以为A或或B,A表示自增减的时机在每次访问后,表示自增减的时机在每次访问后,B表示自表示自增减的时机在每次访问前。增减的时机在每次访问前。593.4指令集指令集数据传送数据传送第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送603.4指令集指令集数据传送数据传送示例 功能描述 LDMIA Rd!, 寄存器列表 从 Rd 处读取多个字,并依次送到寄存器列表中的寄存器。每读一个字后 Rd 自增一次,16 位宽度 STMIA Rd!, 寄存器列表 依
49、次存储寄存器列表中各寄存器的值到 Rd 给出的地址。每存一个字后 Rd 自增一次,16 位宽度 LDMIA.W Rd!, 寄存器列表 从 Rd 处读取多个字,并依次送到寄存器列表中的寄存器。每读一个字后 Rd 自增一次,32 位宽度 LDMDB.W Rd!, 寄存器列表 从 Rd 处读取多个字,并依次送到寄存器列表中的寄存器。每读一个字前 Rd 自减一次,32 位宽度 STMIA.W Rd!, 寄存器列表 依次存储寄存器列表中各寄存器的值到 Rd 给出的地址。每存一个字后 Rd 自增一次,32 位宽度 STMDB.W Rd!, 寄存器列表 存储多个字到 Rd 处。每存一个字前 Rd 自减一次,
50、32 位宽度 增/减单位:字(4 字节)。第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送 “带预索引带预索引”(Pre-indexing)例如:例如:LDR.W R0, R1, #20! ; 预索引预索引 该指令先把地址该指令先把地址 R1+offset 处的值加载到处的值加载到 R0,然后,然后,R1 R1+ 20(offset 也可以是负数)。也可以是负数)。这里的这里的“!”的作用在传送后更新基址寄存器的作用在传送后更新基址寄存器 R1 的值。的值。“!”是可选的。如果没有是可选的。如果没有“!”,则该指令就是普通的带偏移量加载,则该指令
51、就是普通的带偏移量加载指令,不会自动调整指令,不会自动调整 R1的值。带预索引的数据传送可以用在多的值。带预索引的数据传送可以用在多种数据类型上,并且既可用于加载,又可用于存储。种数据类型上,并且既可用于加载,又可用于存储。613.4指令集指令集数据传送数据传送第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送623.4指令集指令集数据传送数据传送示例 功能描述 LDR.W Rd, Rn, #offset! LDRB.W Rd, Rn, #offset! LDRH.W Rd, Rn, #offset! LDRD.W Rd1, Rd2, Rn, #o
52、ffset! 字/字节/半字/双字的带预索引加载(不做带符号扩展,没有用到的高位全清 0) LDRSB.W Rd, Rn, #offset! LDRSH.W Rd, Rn, #offset! 字节/半字的带预索引加载,并且在加载后执行带符号扩展成 32 位整数 STR.W Rd, Rn, #offset! STRB.W Rd, Rn, #offset! STRH.W Rd, Rn, #offset! STRD.W Rd1, Rd2, Rn, #offset! 字/字节/半字/双字的带预索引存储 预索引数据传送的常见用法第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存
53、器与存储器间数据传送“后索引后索引”(Post-indexing)。后索引也要使用一个立即数后索引也要使用一个立即数 offset,但与预索引不同的是,后,但与预索引不同的是,后索引忠实地使用基址寄存器索引忠实地使用基址寄存器 Rd 的值,把它作为传送的目的的值,把它作为传送的目的地址。待到数据传送后,再执行地址。待到数据传送后,再执行 Rd Rd+offset(offset 可以可以是负数)。是负数)。633.4指令集指令集数据传送数据传送第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送“后索引后索引”(Post-indexing)。如:如:S
54、TR.W R0, R1, #-12 ;后索引后索引 该指令是把该指令是把 R0 的值存储到地址的值存储到地址 R1 处的。在存储完毕后,处的。在存储完毕后, R1 R1+(-12) 注意,注意,R1后面是没有后面是没有“!”的,在后索引中,基址寄存器的,在后索引中,基址寄存器是无条件被更新。是无条件被更新。643.4指令集指令集数据传送数据传送第第3章章 Cortex-M3 指令系统指令系统寄存器与存储器间数据传送寄存器与存储器间数据传送653.4指令集指令集数据传送数据传送 后索引数据传送的常见用法示例 功能描述 LDR.W Rd, Rn, #offset LDRB.W Rd, Rn, #o
55、ffset LDRH.W Rd, Rn, #offset LDRD.W Rd1, Rd2, Rn, #offset 字/字节/半字/双字的带预索引加载(不做带符号扩展,没有用到的高位全清 0译注) LDRSB.W Rd, Rn, #offset LDRSH.W Rd, Rn, #offset 字节/半字的带预索引加载,并且在加载后执行带符号扩展成 32 位整数 STR.W Rd, Rn, #offset STRB.W Rd, Rn, #offset STRH.W Rd, Rn, #offset STRD.W Rd1, Rd2, Rn, #offset 字/字节/半字/双字的后预索引存储 数据加
56、载与存储指令ARM处理器是加载处理器是加载/存储体系结构的处理器,对存储器的访问只能存储体系结构的处理器,对存储器的访问只能通过加载和存储指令实现。通过加载和存储指令实现。1. 数据加载与存储的方向问题数据加载与存储的方向问题数据加载与存储(数据加载与存储(Load-store)指令用于在存储器和处理器的寄存)指令用于在存储器和处理器的寄存器之间传送数据。如图所示,器之间传送数据。如图所示,Load用于把内存中的数据装载到寄用于把内存中的数据装载到寄存器中,而存器中,而Store则用于把寄存器中的数据存入内存。则用于把寄存器中的数据存入内存。 数据加载与存储指令有两种类型:数据加载与存储指令有
57、两种类型: 单寄存器加载与存储指令;单寄存器加载与存储指令; 多寄存器加载与存储指令。多寄存器加载与存储指令。 2. 数据加载与存储指令的寻址数据加载与存储指令的寻址 数据加载与存储类指令的基本格式为数据加载与存储类指令的基本格式为 opcode Rd,addr格式中格式中opcode为指令代码,如为指令代码,如LDR表示将存储器中的数据加载到寄表示将存储器中的数据加载到寄存器中。存器中。addr为存储器的地址表达式为存储器的地址表达式,也称为第也称为第2操作数,可表示为操作数,可表示为Rn,offset,其中其中Rn表示基址寄存器,表示基址寄存器,offset表示偏移量。表示偏移量。Addr
58、有如下几种表示形式:有如下几种表示形式: (1)立即数)立即数 立即数可以是一个无符号的数值,这个数值可以加到基址立即数可以是一个无符号的数值,这个数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。寄存器,也可以从基址寄存器中减去这个数值。如:如: LDR R5,R6,#0 x08 STR R6,R7,#-0 x08 (2)寄存器)寄存器 寄存器中的数值可以加到基址寄存器,也可以从基址寄存寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。器中减去这个数值。如:如: LDR R5,R6,R3 STR R6,R7,-R8 (3)寄存器移位)寄存器移位 这种格式由一个通用寄
59、存器和一个立即数组成,寄存器中这种格式由一个通用寄存器和一个立即数组成,寄存器中的数值可以根据指令中的移位标志以及移位常数作一定的移位的数值可以根据指令中的移位标志以及移位常数作一定的移位操作,生成一个地址偏移量。这个地址偏移量可以加到基址寄操作,生成一个地址偏移量。这个地址偏移量可以加到基址寄存器,也可以从基址寄存器中减去这个数值。存器,也可以从基址寄存器中减去这个数值。如:如: LDR R3,R2,R4,LSL#2 LDR R3,R2,-R4,LSR#3(4)标号)标号 这是一种简单的寻址方法。在这种方法中,程序计数器这是一种简单的寻址方法。在这种方法中,程序计数器PC是隐含的基址寄存器,
60、偏移量是语句标号所在的地址和是隐含的基址寄存器,偏移量是语句标号所在的地址和PC(当(当前正在执行的指令)之间的差值。前正在执行的指令)之间的差值。例如:例如: LDR R4,START 3. 地址索引地址索引 ARM指令中的地址索引也是指令的一个功能,索引作指令中的地址索引也是指令的一个功能,索引作为指令的一部分,它影响指令的执行结果。地址索引分为为指令的一部分,它影响指令的执行结果。地址索引分为前索引前索引(Pre-indexed)自动索引自动索引(Auto-indexed)后索引后索引(Post-indexed)。(1)前索引)前索引 前索引也称为前变址,这种索引是在指令执行前把偏移量和基前索引
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑工地广告牌工程施工合同
- 无锡市住房租赁合同
- 中外货物买卖合同
- 2025金融科技公司贷款合同
- 幼儿大班火箭上天
- 2025年份一月份装修合同入户门防盗等级检测争议解决机制
- 主播创业合同范例
- 小学六年级语文教学计划(6篇)
- 2025农行小额存单质押贷款合同
- 借款合同范例手机
- 陕西中考数学第二轮复习策略讲座
- 2023年第十五届“蓝桥杯”科学素养考试题库及答案
- GeomagicDesignX教程教学课件
- 英语:Unit 6 Entertainment and Friendship教案(仁爱英语九年级下)
- 安宁疗护个案护理汇报
- 国家智慧教育平台培训课件
- 正大天虹方矩管镀锌方矩管材质书
- 高层建筑火灾自动喷水灭火系统
- 小学教育课件教案中国文化名人与他们的故事
- 中层竞聘的演讲课件
- 非煤矿山顶板分级管理制度范本
评论
0/150
提交评论