LDX-DSP原理与应用-张卫宁-第3章_第1页
LDX-DSP原理与应用-张卫宁-第3章_第2页
LDX-DSP原理与应用-张卫宁-第3章_第3页
LDX-DSP原理与应用-张卫宁-第3章_第4页
LDX-DSP原理与应用-张卫宁-第3章_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。第3章汇编语言指令系统

目录:

3.1C54x汇编语言指令集介绍

3.2寻址方式

3.3C54x系列DSP的指令系统

第3章汇编语言指令系统

C54x指令集包括:本章介绍C54xDSP的汇编语言指令系统。与其它CPU的指令集相同,汇编语言指令又称为硬指令,它们在汇编和连接后形成可执行的机器码,供DSP进行运算和其它操作。汇编语言指令汇编伪指令宏指令第3章汇编语言指令系统3.1C54x汇编语言指令集介绍

第3章汇编语言指令系统3.1.1指令系统中的符号、缩写及操作符

指令系统中采用的符号和缩写如下列表中所示序号符号含

义1A累加器A2ALU算术逻辑运算单元3AR泛指通用辅助寄存器4ARx指定某一辅助寄存器AR0~AR75ARP

ST0中的3位辅助寄存器指针6ASM

ST1中的5位累加器移位方式位-16~157B累加器B8BRAF

ST1中的块重复操作标志9BRC块重复操作寄存器10BITC或bit_code用于测试指令,指定数据存储器单元中的哪一位被测试,取指范围:0~15第3章汇编语言指令系统序号符号含

义11C16

ST1中的双16位/双精度算术运算方式位12C

ST0中的进位位13CC

2位条件码(0CC3)14CMPT

ST1中的ARP修正方式位15CPL

ST1中的直接寻址编辑标志位16cond表示一种条件的操作数,用于条件执行指令17[d],[D]延时选项18DAB

D地址总线19DAR

DAB地址寄存器20dmad

16位立即数数据存储器地址(0~65535)3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义21Dmem数据存储器操作数22DP

ST0中的数据存储器页指针(0DP511)23Dst目的累加器(A和B)24dst_与dst相反的目的累加器25EAB

E地址总线26EAR

EAB地址总线27extpmad

23位立即程序存储器地址28FRCT

ST1中的小数方式位29hi(A)累加器的高阶位(AH或BH)30HM

ST1中的保持方式位3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义31IFR中断标志寄存器32INTM

ST1中的中断屏蔽位33K少于9位的短立即数34k3

3位立即数(0k37)35k5

5位立即数(-16k515)36k9

9位立即数(0k9511)37lk

16位长立即数38Lmem利用长字寻址的32位单数据存储器操作数39Mmr,MMR存储器映像寄存器40MMRx,MMRy存储器映像寄存器,AR0~AR7或SP3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义41n

XC指令后面的字数,取1或242N指定状态寄存器,N=0为ST0,N=1为ST143OVA

ST0中的累加器A溢出标志44OVB

ST0中的累加器B溢出标志45OVdst指定目的累加器(A或B)的溢出标志46OVdst_指定与Ovdst相反的目的累加器的溢出标志47OVsrc指定源累加器(A或B)的溢出标志48OVM

ST1中的溢出方式位49PA

16位立即端口地址(0PA65535)50PAR程序存储器地址寄存器3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义51PC程序计数器52pmad

16位立即程序存储器地址(0pmad65535)53pmem程序存储器操作数54PMST处理器工作方式状态寄存器55prog程序存储器操作数56[R]舍入选项57rnd循环寻址58RC重复计数器59RTN快速返回寄存器60REA块重复结束地址寄存器3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义61RSA块重复起始地址寄存器62SBIT用于指定状态寄存器位的4位地址(0~15)63SHFT

4位移位值(0~15)64SHIFT

5位移位值(-16~15)65Sind间接寻址的单数据存储器操作数66Smem

16位单数据存储器操作数67SP堆栈指针寄存器68src源累加器(A或B)69ST0,ST1状态寄存器0,状态寄存器170SXM

ST1中的符号扩展方式位3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义71T暂存器72TC

ST0中的测试/控制标志73TOS堆栈顶部74TRN状态转移寄存器75TS由T寄存器的5~0位所规定的移位数(-16~31)76uns无符号数77XF

ST1中的外部标志状态位78XPC程序计数器扩展寄存器79Xmem

16位双数据存储器操作数,用于双数据操作数指令80Ymem

16位双数据存储器操作数,用于双数据操作数指令和单数据操作指令3.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统序号符号含

义81--SP堆栈指针值减182++SP堆栈指针值加183++PC程序计数器值加13.1.1指令系统中的符号、缩写及操作符

第3章汇编语言指令系统3.1.1指令系统中的符号、缩写及操作符

指令系统中的运算符号及优先级如下列表中所示序号符号运算功能求值顺序1+-~!取正、取负、按位求补、逻辑负

从右至左2*/%乘法、除法、求模从左至右3+-加法、减法从左至右4^指数

从左到右

5<<>>左移、右移从左至右6<小于、小于等于从左至右7>大于、大于等于从左至右8!=不等于从左至右第3章汇编语言指令系统序号符号运算功能求值顺序8=等于从左至右9&按位与运算(AND)从左至右10∧

按位异或运算(exclusiveOR)从左至右11|按位或运算(OR)从左至右3.1.1指令系统中的符号、缩写及操作符

本节以LD装载指令为例,说明指令的格式和其它一些有用信息。

汇编语法操作数指令代码执行状态位说明指令字长周期数

第3章汇编语言指令系统3.1.2汇编语言指令举例(P61)第3章汇编语言指令系统3.2寻址方式

C54x的寻址方式共有下列7种:立即寻址绝对寻址累加器寻址直接寻址间接寻址存储器映像寄存器寻址堆栈寻址

立即寻址是指指令中的操作数是一个立即数,用#表示。可使用立即寻址的指令及立即数的位数如下表所示:第3章汇编语言指令系统3.2.1立即寻址3位或5位立即数

8位立即数

9位立即数

16位立即数

LD

FRAMELDRPT

LD

ADDBITFORSTADDMCMPMORMSTMANDLDRPTSUBANDMMACRPTZXORXORM例:LD#4,DP;4->DP指令代码:EA04h第3章汇编语言指令系统3.2.2绝对寻址第3章汇编语言指令系统绝对寻址是指指令中包含着操作数的地址。

绝对寻址有下列4种类型:数据存储器(dmad)寻址程序存储器(pmad)寻址

I/O端口(PA)寻址

*(lk)寻址相关指令如下表所示:第3章汇编语言指令系统3.2.2绝对寻址绝对寻址方式相关指令数据存储器(dmad)寻址

MVDKSmem,dmad

MVDMdmad,MMR

MVKDdmad,Smem

MVMDMMR,dmad

程序存储器(pmad)寻址

FIRSXmem,Ymem,pmad

MACDSmem,pmad,src绝对寻址的地址,通常用一个在程序的初始化中指定的地址标号或符号来指明该数据存储器地址绝对寻址的地址,通常用一个在程序的初始化中指定的地址标号或符号来指明该程序存储器地址第3章汇编语言指令系统绝对寻址方式相关指令程序存储器(pmad)寻址

MACPSmem,pmad,src

MVDPSmem,pmad

MVPDpmad,SmemI/O端口(PA)寻址

PORTRPA,Smem

PORTWSmem,PA

*(lk)寻址

可用于所有支持单数据操作数(Smem)

的指令,通过*(lk)可以寻址数据空间的任意地址

3.2.2绝对寻址绝对寻址的地址,通常用一个在程序的初始化中指定的地址标号或符号来指明该IO口地址LD*AR3,ALD*(BUFFER),B该指令的功能是指将标号为BUFFER的数据存储器单元的内容送入累加器B.累加器寻址是将累加器A中的内容(低16位)作为程序存储器的地址,完成程序空间和数据空间的数据访问的一种方式。

有两条指令采用这种寻址方式

:第3章汇编语言指令系统3.2.3累加器寻址

累加器寻址指令解释READASmem

A中内容为程序存储器地址,将该地址中的数据送入Smem指定的数据存储器中WRITASmem

将Smem指定的数据存储器中的内

容送入A所指出的程序存储器中

直接寻址是指利用指令中的地址偏移量dma与数据页指针DP或堆栈指针SP组合,找到数据空间中的一个16位地址的方式。直接寻址的表示方法是在符号或偏移量前加@。如LD@60h,A

指令代码格式如下所示:第3章汇编语言指令系统3.2.4直接寻址15~8

7

6~0

操作码

I=0

数据存储器地址(dmad)

7位直接寻址有两种产生地址的方法,由ST1中的位CPL来控制CPL=0时

第3章汇编语言指令系统3.2.4直接寻址(基地址+偏移量)直接寻址指令15~876~0操作码I=0dmad页指针DP(位于ST0中)9位数据页指针DP高9位低7位16位数据存储器地址9位数据页指针DPdmad0~5110~127可以访问64K的数据空间CPL=1时

第3章汇编语言指令系统3.2.4直接寻址dmad低7位16位数据存储器地址16位堆栈指针SP堆栈指针SPSP+dmad16位SP+dmad直接寻址指令15~876~0操作码I=0dmad

间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。在这种方式下,辅助寄存器的内容就是数据空间操作数的地址。

按照寻址目的可将间接寻址分为:单操作数寻址双操作数寻址第3章汇编语言指令系统3.2.5间接寻址单操作数寻址

单操作数间接寻址可以使用所有8个辅助寄存器AR0~AR7存放数据空间的Smem地址,并具有16种不同的地址调整功能。第3章汇编语言指令系统3.2.5间接寻址单操作数寻址结构图如下所示:第3章汇编语言指令系统3.2.5间接寻址CAB、DAB、EAB负责传送数据存储器地址CB、DB、EB负责传送读/写数据循环缓冲区长度寄存器相对位置辅助寄存器指针辅助算术逻辑运算单元第3章汇编语言指令系统3.2.5间接寻址单操作数寻址

地址存放情况及地址调整功能共16种:(P68)

操作句法功

能说

明*

ARx

地址=ARx

ARx的内容为数据存储器地址*

+ARx

ARx=ARx+1

地址=ARx

ARx中的地址加1后,再寻址

*

ARx-

地址=ARx

ARx=ARx-1寻址结束后,ARx地址减1*

ARx+

地址=ARx

ARx=ARx+1寻址结束后,ARx地址加1*

ARx-0

地址=ARx

ARx=ARx-AR0

寻址结束后,从ARx中减去AR0的值第3章汇编语言指令系统3.2.5间接寻址单操作数寻址操作句法功

能说

明*

ARx+0

地址

=ARx

ARx=ARx+AR0

寻址结束后,把AR0加到ARx

中*

ARx-0B

地址=ARx

ARx=B(ARx-AR0)寻址结束后,用位倒序进位的方法从ARx中减去AR0的值

*

ARx+0B

地址=ARx

ARx=B(ARx+AR0)寻址结束后,用位倒序进位的方法将

AR0加到ARx中*

ARx-%

地址=ARx

ARx=Circ(ARx-1)寻址结束后,ARx中的地址值按循环减的方法减1*

ARx+%

地址=ARx

ARx=Circ(ARx+1)寻址结束后,ARx中的地址值按循环加的方法加1第3章汇编语言指令系统3.2.5间接寻址单操作数寻址操作句法功

能说

明*

ARx-0%

地址=ARx

ARx=Circ(ARx-AR0)

寻址结束后,按循环减的方法从

ARx中减去AR0中的值

*

ARx+0%

地址=ARx

ARx=Circ(ARx+AR0)

寻址结束后,按循环加的方法将AR0中的值加到ARx

*

ARx(lk)

地址=ARx+lk

ARx=ARx以ARx与16位数之和作为地址,寻址结束后,ARx中的值不变

*

+ARx(lk)

地址=ARx+lk

ARx=ARx+lk将一个16位带符号数加到ARx,然后寻址*

ARx(lk)%

地址=Circ(ARx+lk)

ARx=Circ(ARx+lk)将一个16位带符号数按循环加的方法加至ARx,然后再寻址*

(lk)

地址=(lk)利用16位无符号数作为地址,寻址数据存储器位反向寻址位反向寻址是专门为快速傅立叶变换FFT而设计的。4位二进制数的原始地址与位反向地址的对应关系如下表所示:

详见P69表3-5第3章汇编语言指令系统3.2.5间接寻址(二个关键问题)第3章汇编语言指令系统3.2.5间接寻址正常顺序原始地址位反向地址位反向顺序00000000001000110008200100100430011110012401000010250101101010601100110670111111014位反向寻址

第3章汇编语言指令系统3.2.5间接寻址正常顺序原始地址位反向地址位反向顺序81000000119100110019101010010151110111101131211000011313110110111114111001117151111111115位反向寻址

第3章汇编语言指令系统3.2.5间接寻址循环寻址目的:提高运算速度算法如下:

循环寻址的算法:If0偏移量+步长<

BK;

偏移量=偏移量+步长;Else

if偏移量+步长

BK;偏移量=偏移量+步长-BK;Else

if偏移量+步长

<0;偏移量=偏移量+步长+BK。①地址指针可由低向高增值变化,当增至最高地址时,能够自动返回最低地址;②或由高减量变化,当减至最低地址时,可自动返回最高地址。第3章汇编语言指令系统3.2.5间接寻址循环寻址(P70几个关键参量)

循环寻址示意图如下所示:

循环缓冲区长度寄存器②双操作数寻址

双操作数寻址结构图如下所示:

第3章汇编语言指令系统3.2.5间接寻址第3章汇编语言指令系统3.2.5间接寻址②双操作数寻址

双操作数寻址有4种地址存放情况和地址调整功能:操作码语法功能

说明

*

ARx地址=ARxARx中的内容是数据存储器地址

*

ARx-地址=ARxARx=ARx-1寻址后,ARx的地址减1

*

ARx+地址=ARxARx=ARx+1寻址后,ARx的地址加1

*

ARx+0%地址=ARxARx=circ(ARx+AR0)寻址后,AR0以循环寻址方式加到ARx中去

存储器映像寄存器寻址是一种直接访问存储器映像寄存器MMR的方式,可以用来修改MMR的值。

有8条指令可以使用存储器映像寄存器寻址:

第3章汇编语言指令系统3.2.6存储器映像寄存器寻址第3章汇编语言指令系统3.2.6存储器映像寄存器寻址存储器映像寄存器寻址

LDMMMR,dstMVDMdmad,MMRMVMDMMR,dmadMVMMMMRx,MMRy

POPMMMR(出栈)PSHMMMR(入栈)STLMsrc,MMRSTM#lk,MMR

堆栈寻址用于进行数据或者MMR的入栈和出栈操作。C54X堆栈是下拉式堆栈,即入栈时地址值减小,而出栈时地址值增加。堆栈指针是16位的存储器映像寄存器SP,它总是指向栈顶位置。下列4条指令使用堆栈寻址:

第3章汇编语言指令系统3.2.7堆栈寻址堆栈寻址

PSHDSmem

PSHMMMRPOPDSmemPOPMMMR

C54x的汇编语言指令集共有129条基本指令,按完成的功能可以分为6类:第3章汇编语言指令系统3.3C54x系列DSP的指令系统

数据存取指令算术运算指令逻辑运算指令

控制程序转移指令重复操作指令并行操作指令本节只介绍非并行的数据存取指令,包括:第3章汇编语言指令系统3.3.1数据存取指令

加载指令存储指令

32位长操作数的加载、存储指令混合加载和存储指令以累加器A或B为目标操作数的LD指令

第3章汇编语言指令系统

加载指令

(LD)以累加器A或B为目标操作数的LD指令

LDSmem,dstLDSmem,TS,dstLDSmem,16,dstLDSmem[,SHIFT],dstLDXmem,SHFT,dstLD#K,dstLD#lk[,SHFT],dstLD#lk,16,dstLDsrc,ASM[,dst]LDsrc[,SHIFT],dst例3.11LD*AR3,A1)当SXM=0时,进行无符号数的加载第3章汇编语言指令系统

加载指令

指令执行前

A0000000000SXM0AR30200数据存储器

0200H95A6指令执行后

A00000095A6SXM0AR30200数据存储器

0200H95A6例3.11LD*AR3,A2)当SXM=1时,进行有符号数的加载第3章汇编语言指令系统

加载指令

指令执行前

A0000000000SXM1AR30200数据存储器

0200H95A6指令执行后

AFFFFFF95A6SXM1AR30200数据存储器

0200H95A6例3.11LDA,4,B1)当OVM=0时,对溢出不进行处理,仅通过OVB=1反映溢出第3章汇编语言指令系统

加载指令

指令执行前A007FFF8000B000000FFFFOVB0OVM0指令执行后A007FFF8000B07FFF80000OVB1OVM0例3.11LDA,4,B2)当OVM=1时,对溢出进行处理(置32位最大的正数)第3章汇编语言指令系统

加载指令

指令执行前A007FFF8000B000000FFFFOVB0OVM0指令执行后A007FFF8000B007FFFFFFFOVB1OVM1以暂存器T或ST0、ST1的DP、ASM及ARP字段为目标操作数的LD指令

第3章汇编语言指令系统

加载指令

以暂存器T或ST0、ST1的DP、ASM及ARP字段为目标操作数的LD指令

LDSmem,TLDSmem,DPLD#k9,DPLD#k5,ASMLD#k3,ARPLDSmem,ASM例3.13LD0,ASM第3章汇编语言指令系统

加载指令

ASM00DP3

数据存储器

0180H1234指令执行前指令执行后

ASM14DP003

数据存储器

0180H1234为MMR赋值的指令

第3章汇编语言指令系统②存储指令(ST)

为MMR赋值的指令STLMsrc,MMR;

MMR=src(15-0),将累加器的低16位送入MMR,是1字1周期指令。STM#lk,MMR;

MMR=#lk,将长立即数送入

MMR,是2字2周期指令。例3.14

STLMA,*AR2(P77)第3章汇编语言指令系统②存储指令

指令执行前

A0012345678AR27315AR5(15h)3F69

指令执行后

A0012345678AR20015AR55678

例3.15

STM#1357H,*AR4+

第3章汇编语言指令系统②存储指令

指令执行前

AR00000AR48010指令执行后

AR01357AR40011

例3.16

STM#2468H,60H

第3章汇编语言指令系统②存储指令

指令执行前

0060H0000指令执行后

0060H2468

STH和STL指令(H表高16位L表低16位)

第3章汇编语言指令系统②存储指令

STH和

STL指令

STHsrc,Smem将AH或BH内容送入SmemSTHsrc,ASM,SmemSTHsrc,SHFT,XmemSTHsrc[,SHIFT],SmemSTLsrc,SmemSTLsrc,ASM,SmemSTLsrc,SHFT,Xmem

STLsrc[,SHIFT],Smem

例3.17设累加器(A)=FF98765432HSTL A,8,da

第3章汇编语言指令系统②存储指令

(da)=3200H

STL A,-8,da

STH A,8,da

STH A,-16,da

STH A,-8,da

(da)=7654H

(da)=7654H

(da)=FF98H

(da)=00FFH(SXM=0)

STH A,-16,da

(da)=FFFFH(SXM=1)

第3章汇编语言指令系统③

32位长操作数的加载、存储指令及数据存放格式

32位长操作数的加载、存储指令及数据存放格式DLDLmem,dst

在单周期内同时利用CAB、CB和DAB、DB总线将32位Lmem

读入累加器。是1字1周期指令。DSTsrc,Lmem

两次使用EAB、EB总线将累加器的内容分别写入高16位和低16位数据存储器。是1字2周期指令。

例3-18存放格式对数据存储的影响(P78)

DSTB,*AR3+1)偶地址存放第3章汇编语言指令系统③

32位长操作数的加载、存储指令及数据存放格式指令执行前

B006CACBD90AR30100数据存储器

0100H00000101H0000指令执行后

B006CACBD90AR30102数据存储器

0100H6CAC

0101HBD90第3章汇编语言指令系统③

32位长操作数的加载、存储指令及数据存放格式

2)奇地址存放指令执行前

B006CACBD90AR30101数据存储器

0100H00000101H0000指令执行后

B006CACBD90AR30103数据存储器

0100HBD90

0101H6CAC例3-19存放格式对数据存储的影响

DLD*AR3+,B1)偶地址存放第3章汇编语言指令系统③

32位长操作数的加载、存储指令及数据存放格式指令执行前

B0000000000AR30100数据存储器

0100H6CAC0101HBD90指令执行后

B006CACBD90AR30102数据存储器

0100H6CAC

0101HBD90第3章汇编语言指令系统③

32位长操作数的加载、存储指令及数据存放格式

2)奇地址存放指令执行前

B0000000000AR30101数据存储器

0100H6CAC0101HBD90指令执行后

B00BD906CACAR30103数据存储器

0100H6CAC

0101HBD90

C54x的算术运算指令包括:第3章汇编语言指令系统3.3.2算术运算指令基本算术运算指令特殊运算指令双字(32位)算术运算指令乘累加和乘累减指令

第3章汇编语言指令系统基本算术运算指令加法指令操作字数周期数

ADDSmem

,src

src=src+Smem

1

1

ADDSmem

,TS,src

src=src+Smem<<TS

1

1

ADDSmem

,16

,src[,dst]

dst=src+Smem<<16

1

1

ADDSmem,[,SHIFT],src[,dst]

dst=src+Smem<<SHIFT

2

2

ADDXmem

,SHFT

,src

src=src+Xmem<<SHFT

1

1

ADDXmem

,Ymem

,dst

dst=Xmem<<16+Ymem<<16

1

1

ADD#lk,[,SHFT],src[,dst]

dst=src+#lk<<SHFT

2

2ADD#lk,16,src[,dst]

dst=src+#lk<<16

2

2

ADDsrc,[,SHIFT][,dst]

dst=dst+src<<SHIFT

1

2

ADDsrc,ASM[,dst]

dst=dst+src<<ASM11

ADDCSmem

,src

src=src+Smem+C

1

1

ADDM#lk,Smem

Smem=Smem+#lk

2

2

ADDSSmem

,src

src=src+uns(Smem)

1

1第3章汇编语言指令系统减法指令操作字数周期数

SUBSmem

,src

src=src-Smem

1

1

SUBSmem

,TS,src

src=src-Smem<<TS

1

1

SUBSmem

,16

,src[,dst]

dst=src-Smem<<16

1

1

SUBSmem,[,SHIFT],src[,dst]

dst=src-Smem<<SHIFT

2

2

SUBXmem

,SHFT

,src

src=src-Xmem<<SHFT

1

1

SUBXmem

,Ymem

,dst

dst=Xmem<<16-Ymem<<16

1

1

SUB#lk,[,SHFT],src[,dst]

dst=src-#lk<<SHFT

2

2SUB#lk,16,src[,dst]

dst=src-#lk<<16

2

2

SUBsrc,[,SHIFT][,dst]

dst=dst-src<<SHIFT

1

1

SUBsrc,ASM[,dst]

dst=dst-src<<ASM11

SUBBSmem

,src

src=src-Smem-C

1

1

SUBCSmem

,src

If(src-Smem<<15)>0,

src=(src-Smem<<15)<<1+1Elsesrc=src<<1

1

1

SUBSSmem

,src

src=src-uns(Smem)

1

1基本算术运算指令第3章汇编语言指令系统乘法指令操作字数周期数

MPYSmem

,dst

dst=T*Smem

1

1

MPYRSmem

,dst

dst=rnd(T*Smem)

1

1

MPYXmem

,Ymem

,dst

dst=Xmem

*Ymem,T=Xmem

1

1

MPYSmem

,#lk

,dst

dst=Smem

*#lk

,T=Smem

2

2

MPY#lk

,dst

dst=T*#lk

2

2

MPYA

dst

dst=T*A(32-16)

1

1

MPYASmem

B=Smem*A(32-16),T=Smem

1

1

MPYUSmem

,dst

dst=uns(T)*uns(Smem)

1

1

SQURSmem

,dst

dst=Smem

*Smem,T=Smem

1

1

SQURA,dst

dst=A(32-16)*A(32-16)

1

1基本算术运算指令第3章汇编语言指令系统②

特殊运算指令特殊运算指令操作字数周期数

ABDSTXmem

,Ymem

B

=B

+|A(32-16)|,A=(Xmem-Ymem)<<16

1

1

ABSsrc

[,dst

]

dst

=|src

|11

CMPLsrc

[,dst

]

dst

=src

1

1

DELAYSmem

(Smem

+1)=Smem

1

1

EXPsrc

T=带符号数(src)-8

1

1

FIRSXmem

,Ymem

,

Pmad

B=B

–A*Pmad,A=(Xmem+Ymem)<<1623

LMSXmem

,Ymem

B=B+

Xmem

*Ymem,A=(A

+Xmem<<16)+215

1

1第3章汇编语言指令系统②

特殊运算指令特殊运算指令功能字数周期数

MAXdst

dst

=max(A,B)

1

1

MINdst

dst

=min(A,B)11

NEGsrc

[,dst

]

dst

=-src

1

1

NORMsrc

[,dst

]

dst

=src<<TS,

dst

=norm(src,T)

1

1

POLYSmem

B=Smem<<16,A=rnd(A

*T

+B

)

1

1

RNDsrc

[,dst

]

dst

=src

+21511

SATsrc

Saturate(src)

1

1

SQDSTXmem

,Ymem

B=B+

A(32-16)*A(32-16)A=(Xmem-Ymem)<<16

1

1第3章汇编语言指令系统③

双字(32位)算术运算指令双字指令操作字数周期数C16=0C16=1DADDLmem,src[,dst]dst=

Lmem+srcdst(39~16)=Lmem(31~16)+src(31~16)dst(15~0)=Lmem(15~0)+src(15~0)1

1DADSTLmem,dstdst=

Lmem+(T<<16+T)dst(39~16)=Lmem(31~16)+Tdst(15~0)=Lmem(15~0)–T11DRSUBLmem,srcsrc=

Lmem–srcsrc(39~16)=Lmem(31~16)–src(31~16)src(15~0)=Lmem(15~0)–src(15~0)

1

1第3章汇编语言指令系统③

双字(32位)算术运算指令双字指令操作字数周期数C16=0C16=1DSADTLmem,dstdst=

Lmem–(T<<16+T)dst(39~16)=Lmem(31~16)–Tdst(15~0)=Lmem(15~0)+T1

1DSUBLmem,srcsrc=

src–Lmemsrc(39~16)=src(31~16)–mem(31~16)src(15~0)=src(15~0)–mem(15~0)

1

1DSUBTLmem,dstdst=

Lmem–(T<<16+T)dst(39~16)=Lmem(31~16)–Tdst(15~0)=Lmem(15~0)–T

1

1对常用的乘累加指令的分析:

第3章汇编语言指令系统④

乘累加和乘累减指令MAC[R]MACA[R]MACP和MACDMACSUXmem,Ymem,src

指令MACDSmem,pmad,src

的操作框图如下图所示:第3章汇编语言指令系统④

乘累加和乘累减指令第3章汇编语言指令系统④

乘累加和乘累减指令指令操作字数周期数MACSmem,srcsrc=src+T*Smem

11MACRSmem,srcsrc=rnd(src+T*Smem)11MAC#lk,src[,dst]dst=src+T*#lk

22MACSmem,#lk,src[,dst]dst=src+Smem*#lk,T=Smem22MACXmem,Ymem,src[,dst]dst=src+Xmem*Ymem,T=Xmem11MACRXmem,Ymem,src[,dst]dst=rnd(src+Xmem*Ymem),T=Xmem11MACASmem[,B]B=B+Smem*A(32~16),T=Smem11MACARSmem[,B]B=B+rnd(Smem*A(32~16)),T=Smem11第3章汇编语言指令系统④

乘累加和乘累减指令指令操作字数周期数MACAT,src[,dst]

dst=src+T*A(32~16)11MACART,src[,dst]

dst=rnd(src+T*A(32~16))11MACDSmem,pmad,src

src=src+Smem*pmad,T=Smem,(Smem+1)=Smem23MACPSmem,pmad,srcsrc=src+Smem*pmad,T=Smem

23MACSUXmem,Ymem,src

src=src+uns(Xmem)*Ymem,T=Xmem11MASSmem,src

src=src–T*Smem

11MASRSmem,src

src=rnd(src–T*Smem)

11第3章汇编语言指令系统④

乘累加和乘累减指令指令操作字数周期数MASXmem,Ymem,src[,dst]dst=src–Xmem*Ymem,T=Xmem

11MASRXmem,Ymem,src[,dst]dst=rnd(src–Xmem*Ymem),T=Xmem

11MASASmem[,B]B=B–Smem*A(32~16),T=Smem

11MASAT,src[,dst]dst=src–T*A(32~16)11MASART,src[,dst]dst=rnd(src–T*A(32~16))11SQURASmem,src

src=src+Smem*Smem,T=Smem

11SQURSSmem,src

src=src–Smem*Smem,T=Smem

11逻辑运算指令包括:第3章汇编语言指令系统3.3.3逻辑运算指令布尔型指令移位指令测试指令

第3章汇编语言指令系统布尔型指令与指令操作字数周期数

ANDSmem

,src

src

=src&Smem

1

1

AND#lk[,SHFT],src[,dst]

dst

=src&#lk<<SHFT

2

2AND#lk,16,src[,dst]

dst

=src&#lk<<16

2

2

ANDsrc[,SHIFT][,dst]

dst=dst&src<<SHIFT

1

1

ANDM#lk,Smem

Smem

=Smem&#lk

2

2第3章汇编语言指令系统或指令操作字数周期数

ORSmem

,src

src

=src

|

Smem

1

1

OR#lk[,SHFT],src[,dst]

dst

=src

|#lk<<SHFT

2

2OR#lk,16,src[,dst]

dst

=src

|#lk<<16

2

2

ORsrc[,SHIFT][,dst]

dst=dst

|

src<<SHIFT

1

1

ORM#lk,Smem

Smem

=Smem

|#lk

2

2布尔型指令第3章汇编语言指令系统异或指令操作字数周期数

XORSmem

,src

src

=src

Smem

1

1

XOR#lk[,SHFT],src[,dst]

dst

=src

#lk<<SHFT

2

2XOR#lk,16,src[,dst]

dst

=src

#lk<<16

2

2

XORsrc[,SHIFT][,dst]

dst=dst

src<<SHIFT

1

1

XORM#lk,Smem

Smem

=Smem

#lk

2

2布尔型指令

移位指令共6条,都是单字单周期指令。第3章汇编语言指令系统②

移位指令指令操作ROLsrc带进位位C的循环左移ROLTCsrc带测试位TC的循环左移RORsrc带进位位C的循环右移SFTAsrc,SHIFT[,dst]

dst=src<<SHIFT{算术移位}SFTCsrc若

src(31)=src(30)则

src=src<<1{条件移位}SFTLsrc,SHIFT[,dst]

dst=src<<SHIFT{逻辑移位}

带进位位C的循环左移ROL移位示意图如下:

39~32310累加器src保护位第3章汇编语言指令系统②

移位指令C0

带进位位C的循环右移ROR移位示意图如下:

39~32310累加器src保护位第3章汇编语言指令系统②

移位指令C0

带测试位TC的循环左移ROLTC移位示意图如下:

39~32310累加器src保护位第3章汇编语言指令系统②

移位指令TC0

C逻辑移位指令SFTLsrc,SHIFT的操作示意图:

0﹤SHIFT≤15时

39~32310累加器src保护位第3章汇编语言指令系统②

移位指令0

C0

逻辑移位指令SFTLsrc,SHIFT的操作示意图:

-16≤

SHIFT≤0时

39~32310累加器src保护位第3章汇编语言指令系统②

移位指令0

C0

第3章汇编语言指令系统②

移位指令逻辑移位指令SFTLsrc,SHIFT的操作示意图:

SHIFT=0时C0

算术移位指令SFTAsrc,SHIFT的操作示意图:

0﹤SHIFT≤15时

39

0累加器src第3章汇编语言指令系统②

移位指令C0

算术移位指令SFTAsrc,SHIFT的操作示意图:

-16≤SHIFT≤0,且SXM=039

0累加器src第3章汇编语言指令系统②

移位指令0

C算术移位指令SFTAsrc,SHIFT的操作示意图:

-16≤SHIFT≤0,且SXM=1

39累加器src0第3章汇编语言指令系统②

移位指令C

测试指令通常和条件转移等指令结合,实现程序转移,或用于检测数据的正、负极性,数据的位状态等。第3章汇编语言指令系统③

测试指令

测试指令操作字数周期数BITXmem,BITCTC=Xmem(15–BITC)测试Xmem中指定的某位11BITFSmem,#lkTC=(Smem&&#lk)测试Smem中指定的某些位22BITTSmemTC=Smem(15–T(3~0))测试由T指定的位11CMPMSmem,#lkTC=(Smem==#lk)比较Smem与长立即数是否相等22CMPRCC,ARxARx与AR0进行比较11

控制程序转移类指令的功能是改变程序执行的顺序,可划分为6类:

第3章汇编语言指令系统3.3.4控制程序转移指令(P89)跳转指令调用和返回指令中断指令堆栈操作指令重复指令其它程序控制指令第3章汇编语言指令系统①跳转指令跳转指令分类指令操作字数周期数近程无条件转移B[D]pmadPC=pmad(15~0)24/[2]BACC[D]srcPC=src(15~0)16/[4]远程无条件转移FB[D]extpmadPC=pmad(15~0),XPC=pmad(22~16)24/[2]FBACC[D]srcPC=src(15~0),XPC=src(22~16)16/[4]近程条件转移BC[D]pmad,cond[,cond[,cond]]若条件(cond(s))满足,则PC=pmad(15~0)25/3//[3]BANZ[D]pmad,Sind若(Sind≠0)则PC=pmad(15~0)24/2/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论