没电自动关机会影响电池寿命吗?来看计算机指令集体系工作过程与寻址方法

计算机体系结构与组成

30e547e1fefe4b5280bf05c6e1992c79.png

 

(1)存储程序计算机

程序和数据位于同一个存储空间,按顺序从内存中读取指令,译码,执行。

寄存器使用名字来访问。

比如r0,r1...,r25(ARM的命名)

种类:

(1)高速寄存器:保存数据或数据单元的地址。

(2)特殊功能的寄存器:循环计数器:对一个循环的次数进行计数。

(3)程序计数器;指明了下次执行的指令的地址。

三种指令格式:

(1)LDR:寄存器目的,存储单元源

:将数据从存储单元复制到寄存器;

比如LDR r1,1234

将存储单元地址为1234的数据读取到寄存器r1中。

1a4ec4d596ec43b48a66333786acd7cb.jpg

 

(2)STR:寄存器源,存储单元目的

:将数据从寄存器传输到存储单元。

比如STR r2,200

将r2寄存器的数据传输到地址为200的存储单元。

(3)operation 寄存器目的,寄存器源1,寄存器源2

:操作码operation定义了CPU完成的操作(比如ADD,SUB等),后面有三个操作数,源操作数表明了数据来源,目的操作数指明了结果存放位置。

例如:ADD r1,r2,r3;

将寄存器r2和r3的内容相加,存放到寄存器r1中。

以上指令由操作码部分和操作数部分两部分组成。

a559948efe76420f806928c9b19b0bb2.png

ISA计算机的指令集体系

三个组成部分:寄存器集,寻址方式,指令方式;

计算机指令

MAR存储器地址寄存器:正在访问的存储单元地址。

MBR存储器数据寄存器:保留了刚从存储单元取到的数据

PC程序寄存器:要执行的下一条指令的地址。

每次取值后+4,是因为使用32位的指令或数据,32位/(8位/字)=4字

IR指令寄存器:存放当前执行的指令;

e4386f01e78b44cd8f72c0603ba3974d.png

CU单元:解释指令寄存器中的指令。

ALU:运算器,进行相应的运算。

举例:

LDR r1,1234

4a1bc64a6cd9455e9121501131623421.png

使用RTL语言,箭头指明了数据传送方向。

[ ]代表了寄存器或存储单元的内容。

经历过程:

PC的值复制到地址寄存器

PC指向下一个地址

读出地址为MAR的指令

指令从MBR复制到IR

IR中的操作数地址复制到MBR

地址为MAR的操作数复制到MBR

操作数复制到寄存器

a1b7eca36dde4a5a96f628d6a58e5056.jpg

 

寄存器分类:

(1)通用寄存器:保留临时产生的数据。

(2)特殊功能寄存器:特定功能。

(3)程序员不可见寄存器:程序员不可见。

常量处理

立即数是可以直接使用的数,前面加#,

LDR r1,200;将地址单元为200的内容加载到r1寄存器。

LDR r1,#200:将常量200加载到r1寄存器。

SUBS r5,r5,#1

更新CCR?

(1)r5寄存器的内容减去常量1,然后结果存到r5寄存器中。ARM处理器不会自动更新CCR,所以要在指令后加S显示更新。

(2)一些指令,TEST(测试)或CMP(比较)会自动更新。

(3)CISC处理器会在每次操作后自动更新,但68k不会,68k只更新数据寄存器上的,而不是地址寄存器上的。

BEQ onZero

2b9cdf976f0b4f54ad4d0a329838de56.png

 

如果结果为0,跳转到标号‘onZero’处执行。

CCR是条件码寄存器,在ARM中叫做“状态寄存器”

Z:零位,N:负数,C:产生进位,V:算术溢出:

BPL error :正则跳转;

如果结果为正,跳转到error的地址区域。

寄存器

ADD a=b+c;

操作码ADD设为16位,地址空间为32位。

则:16+32+32+32=112位。

实际计算机使用计算器在CPU中存储,即片上存储。

指令长度为指令中用来选择寄存器的字段一般3到5位,具体取决于计算机中寄存器的个数,

更短的位数,并且寄存器按名访问。

对寄存器的部分内容的操作

9aa0eed8f47040e8ac86422806a135a7.jpg

 

(1)未参与操作的位不变。

(2)对一些寄存器的部分位操作,不参与操作的位清零。

(3)寄存器数据为带符号的整数,操作后符号拓展到32位。

特殊功能寄存器

8086使用了16位寄存器,叫做AX,BX,CX,DX, 每个寄存器可以分解为一对寄存器(比如AH和AL),用作字节寄存器,还有4个变址(指针)寄存器和4个段寄存器(用于打破64k(2^16)大小限制)

通用寄存器

Freescale处理器使用32位寄存器,包括8个数据寄存器D0-D7,8个地址寄存器A0-A7,同种寄存器可以互换使用。

ARM有16个通用寄存器,r0-r15:r0-r13可以互换,r14为链接寄存器,用于保存子程序返回地址,r15为程序计数器。

寻址方式

6e9e2eeafff8421fae0fb4977956330d.jpg

 

1.指令寻址:

(1)顺序寻址:PC程序计数器加一,形成下一跳地址。

跳跃寻址:转移类指令实现:例如

JMP X;跳转到地址为X处执行。

2.数据寻址:

(1)立即数寻址

P=Q+5;

5是立即操作数,是组成指令的一部分。

操作数为常数,立即可用,无须从存储单元读取。

(2)直接寻址

mov ax,[2468]

将存储单元2468的内容复制到ax上。

LOAD-STORE计算机,比如ARM,没有实现直接寻址,而是寄存器指针间接指定或者使用立即数寻址。

不同的处理器的汇编语言格式在:寄存器名,操作数次序,指定直接地址的方式有差异。

(3)间接寻址

指令给出了包含操作数地址的寄存器的地址,

先读取指令,再读取含操作数地址的寄存器,再读取操作数。

含操作数地址的寄存器叫做指针寄存器。

ARM指令:LDR r1,[r2]

将r2寄存器的内容加载到寄存器r1中,

(4)寄存器间接寻址

d11bac72c7414515b887cb95989d4e07.jpg

 

带偏移量的寄存器间接寻址

LDR r2,[r3,#8]

将寄存器r3+8所指存储单元的内容复制到寄存器r2中。

MOV ax,[12,bx]

将寄存器12+bx所指存储单元的内容复制到寄存器ax中。

MOVE (16,A5),D2

将寄存器16+A5所指存储单元的内容复制到寄存器d2中。

操作数地址为指令的一部分

ADD 1234,D2

将存储单元1234的内容j加载到寄存器D2上。

(5)程序计数器的相对寻址

LDR r0,[PC,#16]

bd4c5f92984f40cba96aec53d942e276.jpg

 

表明操作数地址相对于r1有16个字节的正偏移。

即相对于PC的偏移量为16字节或相对于当前指令的偏移量为16+8=24字节。(ARM的PC总是当前指令地址+8,应为1流水线机制,在执行完当前指令后自动读取下一条指令)

程序计数器相对寻址使用PC是ARM体系结构的重要特征。

(6)存储器与寄存器寻址

存储器-寄存器型:源操作数在存储器中,目的操作数在寄存器中。

寄存器-存储器型:源操作数在寄存器中,目的操作数在存储器中。

寄存器-寄存器型:源操作数,目的操作数都在寄存器中。

(8)寄存器寻址

8777c8621611428b8c235772d90f5ced.jpg

 

基址寄存器寻址:

设有基址寄存器BR,

有效地址为基址寄存器的内容和形式地址之和;

变址寄存器寻址:

有效地址为变址寄存器的内容和形式地址之和;

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值