计算机体系结构与组成
(1)存储程序计算机
程序和数据位于同一个存储空间,按顺序从内存中读取指令,译码,执行。
寄存器使用名字来访问。
比如r0,r1...,r25(ARM的命名)
种类:
(1)高速寄存器:保存数据或数据单元的地址。
(2)特殊功能的寄存器:循环计数器:对一个循环的次数进行计数。
(3)程序计数器;指明了下次执行的指令的地址。
三种指令格式:
(1)LDR:寄存器目的,存储单元源
:将数据从存储单元复制到寄存器;
比如LDR r1,1234
将存储单元地址为1234的数据读取到寄存器r1中。
(2)STR:寄存器源,存储单元目的
:将数据从寄存器传输到存储单元。
比如STR r2,200
将r2寄存器的数据传输到地址为200的存储单元。
(3)operation 寄存器目的,寄存器源1,寄存器源2
:操作码operation定义了CPU完成的操作(比如ADD,SUB等),后面有三个操作数,源操作数表明了数据来源,目的操作数指明了结果存放位置。
例如:ADD r1,r2,r3;
将寄存器r2和r3的内容相加,存放到寄存器r1中。
以上指令由操作码部分和操作数部分两部分组成。
ISA计算机的指令集体系
三个组成部分:寄存器集,寻址方式,指令方式;
计算机指令
MAR存储器地址寄存器:正在访问的存储单元地址。
MBR存储器数据寄存器:保留了刚从存储单元取到的数据
PC程序寄存器:要执行的下一条指令的地址。
每次取值后+4,是因为使用32位的指令或数据,32位/(8位/字)=4字
IR指令寄存器:存放当前执行的指令;
CU单元:解释指令寄存器中的指令。
ALU:运算器,进行相应的运算。
举例:
LDR r1,1234
使用RTL语言,箭头指明了数据传送方向。
[ ]代表了寄存器或存储单元的内容。
经历过程:
PC的值复制到地址寄存器
PC指向下一个地址
读出地址为MAR的指令
指令从MBR复制到IR
IR中的操作数地址复制到MBR
地址为MAR的操作数复制到MBR
操作数复制到寄存器
寄存器分类:
(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’处执行。
CCR是条件码寄存器,在ARM中叫做“状态寄存器”
Z:零位,N:负数,C:产生进位,V:算术溢出:
BPL error :正则跳转;
如果结果为正,跳转到error的地址区域。
寄存器
ADD a=b+c;
操作码ADD设为16位,地址空间为32位。
则:16+32+32+32=112位。
实际计算机使用计算器在CPU中存储,即片上存储。
指令长度为指令中用来选择寄存器的字段一般3到5位,具体取决于计算机中寄存器的个数,
更短的位数,并且寄存器按名访问。
对寄存器的部分内容的操作
(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是立即操作数,是组成指令的一部分。
操作数为常数,立即可用,无须从存储单元读取。
直接寻址
mov ax,[2468]
将存储单元2468的内容复制到ax上。
LOAD-STORE计算机,比如ARM,没有实现直接寻址,而是寄存器指针间接指定或者使用立即数寻址。
不同的处理器的汇编语言格式在:寄存器名,操作数次序,指定直接地址的方式有差异。
间接寻址
指令给出了包含操作数地址的寄存器的地址,
先读取指令,再读取含操作数地址的寄存器,再读取操作数。
含操作数地址的寄存器叫做指针寄存器。
ARM指令:LDR r1,[r2]
将r2寄存器的内容加载到寄存器r1中,
寄存器间接寻址
带偏移量的寄存器间接寻址
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上。
程序计数器的相对寻址
LDR r0,[PC,#16]
表明操作数地址相对于r1有16个字节的正偏移。
即相对于PC的偏移量为16字节或相对于当前指令的偏移量为16+8=24字节。(ARM的PC总是当前指令地址+8,应为1流水线机制,在执行完当前指令后自动读取下一条指令)
程序计数器相对寻址使用PC是ARM体系结构的重要特征。
存储器与寄存器寻址
存储器-寄存器型:源操作数在存储器中,目的操作数在寄存器中。
寄存器-存储器型:源操作数在寄存器中,目的操作数在存储器中。
寄存器-寄存器型:源操作数,目的操作数都在寄存器中。