2.2数据传送类和算逻运算类

上传人:壹****1 文档编号:567913337 上传时间:2024-07-22 格式:PPT 页数:47 大小:2.26MB
返回 下载 相关 举报
2.2数据传送类和算逻运算类_第1页
第1页 / 共47页
2.2数据传送类和算逻运算类_第2页
第2页 / 共47页
2.2数据传送类和算逻运算类_第3页
第3页 / 共47页
2.2数据传送类和算逻运算类_第4页
第4页 / 共47页
2.2数据传送类和算逻运算类_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《2.2数据传送类和算逻运算类》由会员分享,可在线阅读,更多相关《2.2数据传送类和算逻运算类(47页珍藏版)》请在金锄头文库上搜索。

1、Sunplus SPCE061A Sunplus SPCE061A 微控制器微控制器数据传送类和算逻运算类 1 SPCE061A 的指令总共只有41种,可分为四类: 数据传送类 算逻运算类 程序转移控制类 其它控制类2指令分类指令分类3数据传送类指令数据传送类指令立即数寻址 、寄存器寻址 、直接地址寻址变址寻址、寄存器间接寻址压栈出栈4立即数寻址立即数寻址 、寄存器寻址、寄存器寻址 、直接地址寻址直接地址寻址 这组指令会执行Rd = X的数据传送操作,即将源操作数X或源操作单元X中的字数据存入目标寄存器Rd。依据寻址方式的不同,X将有不同的意义。5应用举例应用举例 R1=0x28 /IM6 R

2、2=0x2400 /IM16R3=BP + 0x08 /BP+IM6R4=0x30 /A6R5=0x2480 /A16SR=R2 /R立即数寻址【影响标志】N,Z【格式】Rd = IM16/16位的立即数送入目标寄存器Rd Rd = IM6/6位的立即数扩展成16位后送入目标寄存器Rd【举例】设传送前 N=0,Z=1,S=0,C=1 R1=0xF001 /R1的值变为0xF001,N=1,Z=0,S=0,C=1寄存器寻址【影响标志】N,Z 【格式】 Rd = Rs/将源寄存器Rs的数据送给目标寄存器Rd【举例】 设传送前 N=0,Z=1,S=0,C=1 R2=0xF001 /R2的值为0xF0

3、01,N=1,Z=0,S=0,C=1 R1=R2/ R1的值变为0xF001,N=1,Z=0,S=0,C=1直接地址寻址【影响标志】N,Z【格式】A6 = Rs /将源寄存器Rs中的数据送给以A6为地址的存储单元 A16 = Rs/把Rs数据存储到A16指出的存储单元 Rd = A6/把A6指定的存储单元数据读到Rd寄存器 Rd = A16/把A16指定的存储单元数据读到Rd寄存器 【举例】 设传送前 N=1,Z=1,S=0,C=1 R1=0x0011 / R1的值为0x0011,N=0,Z=0,S=0,C=1 0x0010=R1/0x0010单元的值变为0x00118变址寻址、寄存器间接寻址

4、变址寻址、寄存器间接寻址 这组指令会执行X = Rd的数据传送操作,即将寄存器Rd的内容存入目标操作单元X。依据寻址方式的不同, X将有不同的意义;9 BP+0x08=R3 /写入BP+IM60x30=R4 /写入A60x2480=R5 /写入A16R2+ = R1 /R1的值存储于R2,且存储单元 R2=R2 +1 应用举例应用举例10压栈压栈 PUSH Rx, Ry to Rs PUSH Rx to Rs 将n(n=17,SIZE)个序列寄存器RxRy(RxRySP)中的字数据压入Rs指出地址偏移量初值的存储器中,且总是将序号高的寄存器内容先压入 11应用举例应用举例12出栈出栈 POP

5、Rx, Ry from Rs POP Rx from Rs 将一组由Rs指出地址偏移量初值的存储器中的字数据拷贝到n(n = 17,SIZE)个序列寄存器RxRy(RxRySP)中,且总是先拷贝数据到序号低的寄存器内。弹出指令亦可用于从子程序返回或从中断服务子程序返回时用,即它等效于指令RETF或RETI。(当RxRy = SRPC时,POP指令的操等效于指令RETF或RETI)13应用举例应用举例14算逻运算类指令算逻运算类指令顾名思义这类指令就使用来完成一些算术逻辑运算的,基本是执行Rd = X # Y的算术逻辑运算。依据寻址方式的不同,X、Y将有不同的意义。15加法运算加法运算这组指令会

6、执行Rd = X+Y的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行不带进位的加法运算,结果存入Rd寄存器。16应用举例应用举例 R1+=0x28/IM6R2=R1+0x2400 /IM16R3+=BP + 0x08 /BP+IM6R4+=0x30 /A6BP=R4+0x2480 /A16SR+=R2 /R17带进位的加法运算带进位的加法运算 这组指令会执行Rd = X+Y+C的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行带进位的加法运算,结果存入Rd寄存器。 18应用举例应用举例 R1+=0x28,Carry / R1 = R1 +IM6 + 进位CR2=R1+

7、0x2400,Carry / R2 = R1 +IM16 + 进位CR3+=BP + 0x08,Carry/ R3 = R3 +BP+IM6 + 进位CR4+=0x30 / R4 = R4 +A6 + 进位CBP=R4+0x2480,Carry / BP = R4 +A16 + 进位CSR+=R2,Carry / SR=SR+R2+ 进位CPC+=D:BP+,Carry / 写入PC19减法运算减法运算 这组指令会执行Rd = X - Y的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行不带借位的减法运算,结果存入Rd寄存器。20应用举例应用举例 R1-=0x28 / R1 = R

8、1 - IM6R2=R1-0x2400/ R2 = R1 - IM16R3-=BP + 0x08 / R3 = R1 - BP+IM6R4-=0x30 / R4 = R4 - A6BP=R4-0x2480 / BP = R4 - A16SR-=R2 / SR = SR - R2PC-=D:R5+ / 写入PC21带借位的减法运算带借位的减法运算 这组指令会执行Rd = X - Y - C = X + (Y) + C的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行带借位的减法运算,结果存入Rd寄存器。22应用举例应用举例 R1-=0x20,Carry / R1 = R1 -IM6

9、-进位CR2=R1- 0x2400,Carry / R2 = R1 -IM16 -进位CR3-=BP + 0x08,Carry / R3 = R3 -BP+IM6 -进位CR4-=0x30,Carry / R4 = R4 -A6 -进位CBP=R4-0x2480, Carry / BP = R4 -A16 -进位CSR-=R2,Carry / SR = SR - R2 - 进位CPC-=D:BP+,Carry / 写入PC23取补运算取补运算 这组指令会执行Rd = -X = (X) + 1的算术运算,结果存入Rd寄存器。 取补码,即为取反加124应用举例应用举例 R1=-0x27 / R1

10、= R1 -IM6R3=-BP+0x08 / R3 = R3 -BP+IM6R4=-0x30 / R4 = R4 -A6BP=-0x2480 / BP = BP - A16SR=-R2 / SR = SR - R2PC=-D:R5+ / 写入PC25比较运算比较运算 这组指令会执行X-Y的算术运算,但只影响NZSC标志,而不将结果存储。 26应用举例应用举例 CMP R1,0x27 / 比较 R1,IM6CMP R3,BP+0x08 / 比较 R3,BP+IM6CMP R4,0x30 / 比较 R4,A6CMP BP,0x2480 / 比较 BP,A16CMP SR,R2 / 比较SR,R27

11、乘法运算指令乘法运算指令 Rd中字数据与Rs中字数据相乘,积存入MR。ss表示为两个有符号数相乘,而us则表示无符号数与有符号数相乘;缺省表示为两个有符号数相乘。Rd、Rs可为寄存器R1R4、BP(说明:为了避免使用者误用,以及提供弹性给新版指令集作扩充之用,所以Xasm16会限制本指令的Rd、Rs不可以为SP、SR、PC)。不影响标志位。28应用举例应用举例: : MR=R2*R1; /两个有符号数相乘 MR=R1*R2, us; / R1中是无符号数,R2中为有符号数,二者相乘注:MR由R4、R3构成,R4是高位,R3是低位。Rd、Rs可为寄存器R1R4、BP29n n项内积运算指令项内积

12、运算指令 指针Rd与Rs所指存储器地址内有符号字数据之间或无符号与有符号字数据之间进行n项内积运算,结果存入MR。 不影响标志位。30应用举例应用举例 MR=R2*R1, 8;/两个有符号数之内积运算 MR=R1*R2, us, 2; /R1中是无符号数,R2中为有符号数,二者之内积例:FIR_MOV ON /数据自动移动的允许信号MR=R1*R2,ss,4 /4项内积运算32逻辑与逻辑与 这组指令会执行Rd = X & Y的逻辑与操作,结果存入Rd寄存器。影响N、Z标志。应用举例:R1&=0x2F / R1=R1 & IM6R3&=BP+0x08 / R3=R3 & BP+IM6R4&=0x

13、30 / R4=R4 & A6BP=R2&0x2480 / BP=R2 & A16SR&=R2 / SR=SR & R2PC&=D:BP+ /写入PC按位与操作主要用于使操作数的某些位保留(和“1”相与),或使某些位清除(和“0”相与)。例:假设开始时标志位N=0,Z=1,S=0,C=1R1=0x00FF /R1初值0x00FF,Z=0,N=0R2=0xFFFF /R2初值0xFFFF,Z=0,N=10x0001=R2 R2=0x0001 R1&=R2/R1结果为0x00FF,Z=0,N=034逻辑或逻辑或 这组指令会执行Rd = X | Y的逻辑或操作,结果存入Rd寄存器。逻辑或操作主要用于

14、使操作数的某些位保留(和“0”相或),或使某些位置1(和“1”相或)。35逻辑异或逻辑异或 这组指令会执行Rd = X Y的逻辑异或操作,结果存入Rd寄存器。异或操作主要用于使操作数的某些位保留(和“0”相异或),或使某些位取反(和“1”相异或)36测试指令测试指令这组指令会执行X&Y的逻辑操作,但只影响NZ标志,而不将结果存储。应用举例: TEST R1, 0x27;TEST R3, BP+0x08;TEST R4, 0x30;TEST BP, 0x2480;TEST SR, R2;37移位操作移位操作 SPCE061A的移位运算包括逻辑左移、逻辑右移、循环左移、循环右移、算术右移等操作,移

15、位的同时还可进行其他运算,如加、减、比较、取负、与、或、异或、测试等。指令长度1,指令周期3/8,影响N,Z标志。由于硬件原因对于移位操作,每条指令可以移14位。逻辑左移(LSL) 逻辑右移(LSR) 循环左移(ROL) 循环右移(ROR) 算术右移(ASR) 移位移位操作操作【格式】Rd Rs LSL n【说明】该指令对Rs进行n(可设为14)位逻辑左移,将Rs高n位移入SB寄存器,同时Rs的低n(14)位用0补足,结果送Rd寄存器。 逻辑左移(逻辑左移(LSLLSL)【举例】0xF00F逻辑左移3位。寄存器移位前的状态为:寄存器移位后的状态为:每向左移动一次,实际上相当于Rs乘以2。例:R

16、1=0xF00F /R1的初值为0xF00FR1=R1 LSL 3 /R1左移3位后变为0x8078 /0xF00F*8=0X78078 逻辑左移(逻辑左移(LSLLSL)【格式】Rd Rs LSR n【说明】该指令对Rs进行n(可设为14)位逻辑右移,将Rs低n位移入SB寄存器同时Rs的高n(14)位用0补足,结果送Rd寄存器。 逻辑右移逻辑右移( (LSR)LSR)【格式】Rd Rs ROL n【说明】该指令对Rs进行n(可设为14)位循环左移,将Rs的高n位移入SB寄存器,同时移动SB寄存器的高n位移入Rs的低n位,结果送Rd寄存器。 循环左移循环左移( (ROL)ROL)【举例】0x0

17、010循环左移1位。 移位前的各位状态如下: 寄存器移位后的状态为: 循环左移循环左移( (ROL)ROL)【格式】Rd Rs ROR n【说明】该指令对Rs进行n(可设为14)位循环右移,将Rs的低n位移入SB寄存器,同时移动SB寄存器的低n位移入Rs的高n位,结果送Rd寄存器。 循环右移循环右移( (ROR)ROR)【格式】Rd Rs ASR n【说明】该指令将Rs算术右移n(可设为14)位,将Rs的低n位移入SB寄存器,并对最高有效位进行符号扩展,结果送Rd寄存器。该指令适合有符号数的移位操作。 算术右移(算术右移(ASRASR)【举例】0xF111算术右移3位。移位前的各位状态如下: 移位后的各位状态如下:其中E2,E1,E0是Rs中最高有效位的符号扩展位。R1=0xF111 /R1的初值为0xF111R1=R1 ASR 3 / R1移位后的值为0xFE22 算术右移(算术右移(ASRASR)另外,SPCE061A在进行移位的同时,还可进行其它运算,现以算术右移为例说明如下:【格式】Rd += Rs ASR n ,Carry/将Rs移位后的结果与Rd(带进位)相加,结果送Rd寄存器。 Rd - = Rs ASR n ,Carry/将Rs移位后的结果与Rd(带进位)相减,结果送Rd寄存器。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号