一个简单的问题,计算机是如何实现找到数据并计算的?

计算机体系结构与组成

b9cb7caca7f94c6cb63ac767cefc1d5a.jpg

 

(1)存储程序计算机

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

寄存器使用名字来访问。

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

种类:

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

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

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

三种指令格式:

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

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

比如LDR r1,1234

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

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

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

比如STR r2,200

c9b20502d70e4790aa85db8b21c39d81.jpg

 

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

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

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

例如:ADD r1,r2,r3;

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

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

2c73f7b0b04c439aaaeaeab9a2f115be.png

ISA计算机的指令集体系

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

计算机指令

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

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

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

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

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

4f55d76f0c00413191c6cf73d27ecea0.png

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

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

举例:

LDR r1,1234

45038cc8308c433eb5712ff69ed74d0e.png

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

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

经历过程:

PC的值复制到地址寄存器

PC指向下一个地址

读出地址为MAR的指令

指令从MBR复制到IR

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

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

操作数复制到寄存器

db5b66b628b24bcc9143dd60a88f647a.png

 

寄存器分类:

(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

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

b1aab17a94b44724b9e5a115535c68bc.jpg

 

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

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

BPL error :正则跳转;

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

寄存器

ADD a=b+c;

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

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

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

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

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

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

370bcffaf2eb419eb4713d8880e42f09.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为程序计数器。

寻址方式

立即数寻址

P=Q+5;

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

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

直接寻址

2c64ce75f6504ac398cb3d1dc46c8759.jpg

 

mov ax,[2468]

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

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

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

间接寻址

faee9c9f525046a4ab4db9570159baae.jpg

 

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

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

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

ARM指令:LDR r1,[r2]

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

寄存器间接寻址

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

LDR r2,[r3,#8]

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

MOV ax,[12,bx]

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

9479949ee4154af3abfba5d26b5852e9.jpg

 

MOVE (16,A5),D2

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

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

ADD 1234,D2

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

程序计数器的相对寻址

LDR r0,[PC,#16]

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

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

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

存储器与寄存器寻址

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值