版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算术运算程序2026/7/919:442基本算术运算包括:
加减法和乘法运算除法运算长字和并行运算
2026/7/919:443
算术运算程序
1
加、减法和乘法运算在数字信号处理中,加法和乘法运算是最常见的算术运算。【例1】计算y=a
x+b程序:
LD@a,T
;取a值,T=aMPY@x,B
;完成ax乘积,B=axADD@b,B
;完成ax+b运算,B=ax+bSTLB,@y
;计算结果存入y中2026/7/919:4441
加、减法和乘法运算【例2】计算y=xl
al+x2
a2
程序:
LD@x1,TMPY@a1,BLD@x2,TMAC@a2,BSTLB,@ySTHB,@y+1;T=x1;B=x1a1;T=x2;乘法累加,B=x1a1+x2a2;计算结果的低字BL存入y中;计算结果的高字BH存入y+1中2026/7/919:4451
加、减法和乘法运算【例3】计算y=
程序:
*********************************************example.asm*********************************************
.title“example.asm”
.mmregs
stack.usect“STACK”,10h
.bssa,4
.bssx,4.bssy,1.defstart.data
;为堆栈指定空间
;为变量分配9个字的空间2026/7/919:4461
加、减法和乘法运算【例3】计算y=
程序:
table:
.word1,2,3,4
.word8,6,4,2.text
start:STM#0,SWWSR
STM#STACK+10h,SP
STM#a,AR1RPT#7
MVPDtable,*AR1+
CALLSUMend:Bend
;变量初始化;插入0个等待状态;设置堆栈指针;
AR1指向a;移动8个数据;从程序存储器到数据存储器;调用SUM子程序
2026/7/919:4471
加、减法和乘法运算【例3】计算y=
程序:
SUM:STM#a,AR3STM#x,AR4RPTZA,#3MAC*AR3+,*AR4+,ASTLA,@yRET.end
;子程序执行2026/7/919:4481
加、减法和乘法运算【例4】求4项乘积aixi(i=1,2,3,4)中的最大值,并存放累加器A中。
程序:
STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,Aloop1:LD*AR1+,TMPY*AR2+,BMAXABANZloop1,*AR3-;ai首地址a给AR1;xi首地址x给AR2;设置计数器AR3=2;取系数T=ai,并修改AR1;乘法运算A=aixi,并修改AR2
;取系数T=ai,并修改AR1;乘法运算B=aixi,并修改AR2
;求A和B中的最大值
;若AR3≠0,则循环,并修改AR3
若AR3=0,则不循环
2026/7/919:449
算术运算程序
2
除法运算在’C54x中没有除法器硬件,也没有专门的除法指令。但是,利用条件减法指令(SUBC)和重复指令(RPT)可实现两个无符号数的除法运算。条件减法指令:
SUBCSmem,src
功能:(src)-(Smem)<<15→ALU输出端若ALU输出0,则(ALU输出)<<1+1→src
否则(src)<<1→src重复指令:
RPT#K
功能:RC=#K,重复执行下条指令K+1次。2026/7/919:44102
除法运算1.
|被除数|<|除数|例:编写0.4÷(-0.8)的程序数据存储器
.bssnum,1num分子
.bssden,1den分母
.bssquot,1quot商::
.data
table
.word4*32768/10;0.4.word-8*32768/10;-0.8
table0.4-0.8
.textstart:STM#num,AR1
AR1num
RPT#1MVPDtable,*AR1+0.4-0.8quot2026/7/919:44112
除法运算1.
|被除数|<|除数|例:编写0.4÷(-0.8)的程序0.4::-0.8商-0.80.4数据存储器numdenquottableAR1quot
LD@den,16,A;分母送AH
MPYA@num;商符号送B(num)×AH→B,即分子×分母→B,取符号。
ABSA;取分母绝对值
STHA,@den0.8
LD@num,16,A;分子送AH
ABSA;取分子绝对值
RPT#14SUBC@den,A
;15次减法循环完成除法
XC1,BLT
;若B<0,则变号
NEGA
STLA,@quot
;保存商-0.52026/7/919:44122
除法运算1.
|被除数|<|除数|例:编写0.4÷(-0.8)的程序运行结果:被除数
除数
商(十六进制)
商(十进制)
4*32
768/10(0.4)-8*32
768/10(-0.8)0xC000-0.5-1281
0240xF000-0.1252026/7/919:44132
除法运算2.
|被除数|>|除数|例:编写16384÷512的程序
.bssnum,1.bssden,1.bssquot,1.datatable
.word16
384.word512.textstart:STM#num,AR1RPT#1MVPDtable,*AR1+
;16
384
;512
;传送2个数据至分子、分母单元2026/7/919:44142
除法运算2.
|被除数|>|除数|例:编写16384÷512的程序
LD@den,16,AMPYA@numABSASTHA,@denLD@num,AABSARPT#15SUBC@den,AXC1,BLTNEGASTLA,@quot
;将分母移到累加器A(31~16)
;(num)*A(32~16)→B,获取商的符号
;分母取绝对值
;分母绝对值存回原处
;分子→A(32~16)
;分子取绝对值
;16次减法重复操作,完成除法
;如果B<0(商是负数),则需要变号
;保存商
2026/7/919:44152
除法运算2.
|被除数|>|除数|例:编写16384÷512的程序运行结果:被除数
除数
商(十六进制)
商(十进制)
16
3845120xC0203266*32
768/100(0.66)-33*32
768/100(-0.33)0xFFFE-2注意:SUBC指令仅对无符号数进行操作,因此先对被除数和除数取绝对值,然后利用乘法操作获取商的符号,最后通过条件操作指令给商加上适当的符号。2026/7/919:4416
算术运算程序
3
长字运算和并行运算长字指令:
DLDLmem,dstDSTsrc,LmemDADDLmem,src[,dst]DSUBLmem,src[,dst]
DRSUBLmem,src[,dst]1.长字运算
;dst=Lmem单周期
;Lmem=src双周期
;dst=src+Lmem单周期
;dst=src-Lmem单周期
;dst=Lmem-src单周期
’C54x可以利用32位长操作数进行长字运算。
2026/7/919:44171.长字运算
长字的排列方式偶地址排列奇地址排列(1)
偶地址排列如:
DLD*AR3+,A
执行前:A
0000000000
AR3
0100数据存储器0100h6
C
A
C0101hB
D
9
0高字低字执行后:A
0000000000
AR3
01006CAC0101BD900102
指令中给出的地址为偶地址,则存储器低地址存放高16位操作数。
2026/7/919:44181.长字运算
(1)
偶地址排列【例5】偶地址排列法举例。
.bssa,2.bssy,2.datatable:.word06CACH,0BD90H.text
…STM#a,AR1RPT#1MVPDtable,*AR1+STM#a,AR3DLD*AR3+,A执行前:
A=00
0000
0000h
AR3=0100h
(0100h)=6CACh(高字)
(0101h)=BD90h(低字)执行后:
A=00
6CAC
BD90h
AR3=0102h(0100h)=6CACh(0101h)=BD90h
2026/7/919:44191.长字运算
(2)
奇地址排列
如:
DLD*AR3+,A
执行前:A
0000000000
AR3
0101数据存储器0100h6
C
A
C0101hB
D
9
0低字高字执行后:A
0000000000BD906CAC
AR3
010101020103
指令中给出的地址为奇地址,则存储器低地址存放低16位操作数。
2026/7/919:44201.长字运算
(2)
奇地址排列【例6】奇地址排列法举例。
.bssa,2.bssy,2.datatable:.word06CACH,0BD90H.text
…STM#a,AR1RPT#1MVPDtable,*AR1-STM#a,AR3DLD*AR3+,A执行前:
A=00
0000
0000h
AR3=0101h
(0100h)=6CACh(低字)
(0101h)=BD90h(高字)执行后:
A=00
BD90
6CAC
h
AR3=0103h(0100h)=6CACh(0101h)=BD90h
2026/7/919:4421【例7】计算Z32
=X32+Y32。
标准运算
.bssxhi,1
.bssxlo,1
.bssyhi,1
.bssylo,1
.bsszhi,1
.bsszlo,1
…数据存储器xhiX31~X16xloX15~X0……yhiY31~Y16yloY15~Y0……zhizlo
LD@xhi,16,AADDS@xlo,AADD@yhi,16,AADDS@ylo,ASTHA,@zhiSTLA,@zloAGAHAL
LD@xhi,16,AX31~X160
0
0
0X31~X160
0
0
0
ADDS@xlo,A+X15~X0
X31~X16X15~X0
X15~X0
ADD@yhi,16,A+Y31~Y160
0
0
0
Z31~Z16X15~X0
Z31~Z16X15~X0
ADDS@ylo,A+Y15~Y0
Z31~Z16Z15~Z0
Z15~Z0
STHA,@zhiZ31~Z16
STLA,@zlo
Z15~Z0
6字,6T2026/7/919:4422【例7】计算Z32
=X32+Y32。
标准运算数据存储器xhiX31~X16X15~X0……yhiY31~Y16Y15~Y0……zhi
LD@xhi,16,AADDS@xlo,AADD@yhi,16,AADDS@ylo,ASTHA,@zhiSTLA,@zlo
6字,6T长字运算
.bssxhi,2,1,1
.bssyhi,2,1,1.bsszhi,2,1,1
…
DLD@xhi,ADADD@yhi,ADSTA,@zhi
AGAHAL
DLD@xhi,A
X31~X16X15~X0X31~X16X15~X0
DADD@yhi,A+Y31~Y16Y15~Y0
Z31~Z16Z15~Z0Z31~Z16Z15~Z0
DSTA,@zhi
Z31~Z16Z15~Z0
3字,3T2026/7/919:44233
长字运算和并行运算2.并行运算
并行运算就是同时利用D总线和E总线,通过并行指令来实现数据的加载和算术运算。
D总线用来执行加载或算术运算。E总线用来存放先前的结果。
并行指令:并行加载和乘法指令并行加载和存储指令并行存储和乘法指令并行存储和加/减指令2026/7/919:44242.并行运算
LD||MAC[R]LD||MAS[R]
例如:
LDXmem,dst1||MAC[R]Ymem,[,dst2]
功能:dst1=Xmem<<16;dst2=dst2+T*Ymem。并行加载和乘法指令:2026/7/919:44252.并行运算
ST||LD
例如:
STsrc,Ymem||LDXmem,dst
功能:Ymem=src>>(16-ASM);dst=Xmem<<16。并行加载和存储指令:2026/7/919:44262.并行运算
ST||MPYST||MAC[R]ST||MAS[R]
例如:
STsrc,Ymem||MAC[R]Xmem,dst
功能:Ymem=src>>(16-ASM);dst=dst+T*Xmem。并行存储和乘法指令:2026/7/919:44272.并行运算
ST||ADDST||SUB
例如:
STsrc,Ymem||ADDXmem,dst
功能:Ymem=src>>(16-ASM);dst=dst+Xmem。并行存储和加/减指令:2026/7/919:44282.并行运算
注
意
并行指令均为单字单周期指令;并行指令先存储,后加载或算术运算;并行指令的操作均在累加器的高位中进行,并且大多数指令受ASM位的影响。2026/7/919:44292.并行运算
【例8】编写计算z=x+y和f=e+d的程序xyz……def
·
bssx,3
·
bssd,3STM#x,AR5STM#d,AR2LD#0,ASMLD*AR5+,16,AADD*AR5+,16,ASTA,*AR5||LD*AR2+,BADD*AR2+,16,BSTHB,AR2
·
bssx,3
·
bssd,3
STM#x,AR5
LD#0,ASM
LD*AR5+,16,A
ADD*AR5+,16,A
STA,*AR5
||LD*AR2+,B
ADD*AR2+,16,B
STHB,AR2
STM#d,AR22026/7/919:44303
长字运算和并行运算3.
64位加法和减法运算
可利用长字指令可完成64位数的加减运算。【例9】编写完成Z64
=
W64+X64-Y64的程序。运算过程:W64:X64:w3w2w1w0
x3x2x1x0
+s1s0
Cs3s2
S64:S64=s3s2s1s0
s1s0=w1w0+x1x0
s3s2=w3w2+x3x2+CY64:y3y2y1y0
-z1z0
Oz3z2
Z64:Z64=z3z2z1z0
z1z0=s1s0-y1y0
z3z2=s3s2-y3y2-O2026/7/919:44313.64位加法和减法运算
【例9】编写完成Z64
=
W64+X64-Y64的程序。程序:
DLD@w1,ADADD@x1,ADLD@w3,BADDC@x2,BADD@x3,16,BDSUB@y1,ADSTA,@z1SUBB@y2,BSUB@y3,16,BDSTB,@z3;A=w1w0;A=s1s0,产生C;B=w3w2;B=w3w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖南省交通规划勘察设计院有限公司春季招聘63人笔试历年参考题库附带答案详解
- 2025年海洋出版社有限公司公开招聘应届毕业生2人笔试历年参考题库附带答案详解
- 2025年池州市排水有限公司招聘工作人员招考10名笔试历年参考题库附带答案详解
- 2025年江苏南通交通建设投资集团有限责任公司公开招聘工作人员24人笔试历年参考题库附带答案详解
- 2025年春季江苏钟吾大数据发展集团有限公司公开招聘8人笔试历年参考题库附带答案详解
- 2025年度西藏机场集团外部招聘5人(第三期)笔试历年参考题库附带答案详解
- 2025年度山东省水利勘测设计院有限公司校园招聘13人笔试历年参考题库附带答案详解
- 进医院应聘试题及答案
- 吉林单招铁路试题及答案
- 陕西省西安市浐灞区2025届四年级数学第二学期期中检测模拟试题(含解析)
- 2025届THUSSAT北京市清华大学中学高三一诊考试英语试卷含解析
- 正常分娩课件教学课件
- 加油站综合管理制度
- 三副换证实习报告
- 八年级数学下册 中心对称图形-平行四边形综合压轴(50题12个考点)(原卷版)
- 北京市东城区东直门中学2024-2025学年七年级上学期分班考数学试卷
- JT-T-1185-2018城市轨道交通行车组织规则
- 社会工作实务(初级):就业援助员(三)
- XFT 3004-2020 汽车加油加气站消防安全管理
- 《商务数据分析与应用》课程标准
- 防溺水安全培训PPT
评论
0/150
提交评论