DSO实验2.docx

上传人:b****5 文档编号:27739857 上传时间:2023-07-04 格式:DOCX 页数:16 大小:41.56KB
下载 相关 举报
DSO实验2.docx_第1页
第1页 / 共16页
DSO实验2.docx_第2页
第2页 / 共16页
DSO实验2.docx_第3页
第3页 / 共16页
DSO实验2.docx_第4页
第4页 / 共16页
DSO实验2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

DSO实验2.docx

《DSO实验2.docx》由会员分享,可在线阅读,更多相关《DSO实验2.docx(16页珍藏版)》请在冰豆网上搜索。

DSO实验2.docx

DSO实验2

实验二算术运算与数据操作的汇编语言程序设计实验

一、实验内容与步骤(2、3、4、5、7选做,6、8必做)

1、运行CCS。

2、编写程序,计算y=x1+x2+…+x10(xi的值自己定义)。

3、编写程序,计算z=x+y-w、y=mx+bx、y=x1×a2-x2×a2(自变量的值自己定义)。

4、编写程序,计算y=a1x1+a2x2+…+a40x40(aixi的值自己定义)。

5、编写程序,用长字运算指令实现Z32=X32+Y32,用并行运算指令实现z=x+y和f=e+d。

6、编制程序,计算y=a1x1+a2x2+…+a10x10,其中数据均为小数(aixi的值自己定义)。

7、分别编写程序,计算(-0.24)÷0.48和1024÷128。

8、编写浮点乘法程序,计算x1×x2×x3=0.2×(-0.4)×0.25。

答2:

.title"sy2.asm";伪指令。

用于格式化输出清单文件,声明在每页的顶部打印文件标题

.mmregs;伪指令。

声明CPU寄存器名称

STACK.usect"STACK",10H;伪指令。

自定义未初始化段STACK及大小(10H个字),最左边的STACK是标号

.bssx,10;伪指令。

声明数组x,10个字

.bssy,1;伪指令。

声明变量y,1个字

.defstart;伪指令。

声明本文件中的标号start能被别的文件(程序)引用

.data;伪指令,指示下面的代码为数据段,通常包含初始化的数据(常数)。

table:

.word10,20,3,4,5,1,1,1,1,1;伪指令。

声明10个16位整数类型的常数。

table是标号。

.text;伪指令,指示下面的代码为文本段,通常包含可执行的代码。

start:

STM#0,SWWSR;SWWSR=0,插入0个等待状态。

start是标号。

STM#STACK+10H,sp;sp=#STACK+10H,设置堆栈指针指向堆栈段的底部

STM#x,AR1;AR1=#x或AR1指向数组x

RPT#9;下一条指令重复执行9+1=10次

MVPDtable,*AR1+;数据传送。

程序存储器中的table数据表→AR1+指向的数据存储器

LD#0,A;累加器A清零

CALLSUM;调用求和子程序SUM

end:

Bend;无条件转移到标号end所在地方执行程序

SUM:

;标号,指示求和子程序SUM从这里开始

STM#x,AR3;AR3指向数组x

STM#9,AR2;AR2=9

loop:

ADD*AR3+,A;*AR3+A→A,然后AR3=AR3+1。

loop是标号。

BANZloop,*AR2-;如果AR2的值不为0,AR2=AR2-1,跳转到loop处执行;否则执行下一条指令

STLA,*(y);y=AL

RET;子程序返回

.end;伪指令。

指示汇编结束

编写中断向量表文件:

.title"vectors.asm"

.refstart;伪指令。

声明要引用其他程序中定义的标号start

.sect".vectors";伪指令。

定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致

Bstart;无条件转移到标号start所在的地方执行程序

.end

编写链接命令文件:

vectors.obj/*声明要链接的文件---中断向量表文件的目标文件*/

sy2.obj/*声明要链接的文件---主程序文件的目标文件*/

-osy2.out/*声明链接产生的可执行文件名称,默认为a.out*/

-msy2.map/*声明链接产生的存储器映射文件*/

-estart/*声明主程序入口*/

MEMORY/*关键字加一对{},存储器配置*/

{

PAGE0:

/*程序存储区*/

EPROM:

org=0090Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/

VECS:

org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/

PAGE1:

/*数据存储区*/

SPRAM:

org=1000Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/

DARAM:

org=2000Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/

}

SECTIONS/*关键字加一对{},定位段*/

{

.text:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.data:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.bss:

>SPRAMPAGE1/*将.text段映射或定位到PAGE1的SPRAM区*/

STACK:

>DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/

.vectors:

>VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/

}

运行后的结果

答4:

.title"sy2.asm"

.mmregs

STACK.usect"STACK",30H

.bssa,40

.bssx,40

.bssy,2

.data

table:

.word1,2,3,4,5,6,7,8,9,10,11

.word1,2,3,4,5,6,7,8,9,10,11

.word12,13,14,15,16,17,18,19,20

.word12,13,14,15,16,17,18,19,20

.word21,22,23,24,25,26,27,28

.word21,22,23,24,25,26,27,28

.word29,30,1,2,3,4,5,6,7,8,9,10

.word29,30,1,2,3,4,5,6,7,8,9,10

.defstart

.text

start:

STM#a,AR1

RPT#79

MVPDtable,*AR1+

LD#0,B

STM#a,AR2

STM#x,AR3

STM#39,BRC

RPTBdone-1

LD*AR2+,T;单操作数指令

MPY*AR3+,A;单操作数指令

ADDA,B

done:

STHB,*(y)

STLB,*(y+1)

end:

Bend

.end

;数据传送。

程序存储器中的table数据表→AR1+指向的数据存储器

LD#0,A;累加器A清零

CALLSUM;调用求和子程序SUM

end:

Bend;无条件转移到标号end所在地方执行程序

SUM:

;标号,指示求和子程序SUM从这里开始

STM#x,AR3;AR3指向数组x

STM#19,AR2;AR2=9

loop:

ADD*AR3+,A;*AR3+A→A,然后AR3=AR3+1。

loop是标号。

BANZloop,*AR2-;如果AR2的值不为0,AR2=AR2-1,跳转到loop处执行;否则执行下一条指令

STLA,*(y);y=AL

RET;子程序返回

.end;伪指令。

指示汇编结束

编写中断向量表文件:

.title"vectors.asm"

.refstart;伪指令。

声明要引用其他程序中定义的标号start

.sect".vectors";伪指令。

定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致

Bstart;无条件转移到标号start所在的地方执行程序

.end

编写链接命令文件:

vectors.obj/*声明要链接的文件---中断向量表文件的目标文件*/

sy2.obj/*声明要链接的文件---主程序文件的目标文件*/

-osy2.out/*声明链接产生的可执行文件名称,默认为a.out*/

-msy2.map/*声明链接产生的存储器映射文件*/

-estart/*声明主程序入口*/

MEMORY/*关键字加一对{},存储器配置*/

{

PAGE0:

/*程序存储区*/

EPROM:

org=0090Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/

VECS:

org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/

PAGE1:

/*数据存储区*/

SPRAM:

org=1000Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/

DARAM:

org=2000Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/

}

SECTIONS/*关键字加一对{},定位段*/

{

.text:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.data:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.bss:

>SPRAMPAGE1/*将.text段映射或定位到PAGE1的SPRAM区*/

STACK:

>DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/

.vectors:

>VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/

}

运行后的结果:

答6:

.title"sy2.asm"

.mmregs

STACK.usect"STACK",10H

.bssa,10

.bssx,10

.bssy,1

.defstart

.data

table:

.word1*32768/10;0.1

.word2*32768/10;0.2

.word-3*32768/10;-0.3

.word4*32768/10;0.4

.word1*32768/10;0.1

.word2*32768/10;0.2

.word-3*32768/10;-0.3

.word4*32768/10;0.4

.word8*32768/10;0.8

.word6*32768/10;0.6

.word1*32768/10;0.1

.word2*32768/10;0.2

.word-3*32768/10;-0.3

.word4*32768/10;0.4

.word1*32768/10;0.1

.word2*32768/10;0.2

.word-3*32768/10;-0.3

.word4*32768/10;0.4

.word8*32768/10;0.8

.word6*32768/10;0.6

.text

start:

SSBXFRCT

STM#a,AR1

RPT#19

MVPDtable,*AR1+

STM#x,AR2

STM#a,AR3

RPTZA,#9

MAC*AR2+,*AR3+,A

STHA,*(y)

end:

Bend

.end

编写中断向量表文件:

.title"vectors.asm"

.refstart;伪指令。

声明要引用其他程序中定义的标号start

.sect".vectors";伪指令。

定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致

Bstart;无条件转移到标号start所在的地方执行程序

.end

编写链接命令文件:

vectors.obj/*声明要链接的文件---中断向量表文件的目标文件*/

sy2.obj/*声明要链接的文件---主程序文件的目标文件*/

-osy2.out/*声明链接产生的可执行文件名称,默认为a.out*/

-msy2.map/*声明链接产生的存储器映射文件*/

-estart/*声明主程序入口*/

MEMORY/*关键字加一对{},存储器配置*/

{

PAGE0:

/*程序存储区*/

EPROM:

org=0090Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/

VECS:

org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/

PAGE1:

/*数据存储区*/

SPRAM:

org=1000Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/

DARAM:

org=2000Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/

}

SECTIONS/*关键字加一对{},定位段*/

{

.text:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.data:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.bss:

>SPRAMPAGE1/*将.text段映射或定位到PAGE1的SPRAM区*/

STACK:

>DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/

.vectors:

>VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/

}

运行后的结果:

答8:

***x1:

被乘数,m2:

乘数的尾数,m3:

乘数的尾数,x2:

乘数,x3:

乘数,ep:

乘积的指数,e1:

被乘数的指数******************

***mp:

乘积的尾数,m1:

被乘数的尾数,product:

乘积,e2:

乘数的指数,e3:

乘数的指数,temp:

暂存单元***

.title"sy2.asm"

.mmregs

.defstart

STACK.usect"STACK",100

.bssx1,1

.bssx2,1

.bssx3,1

.bsse1,1

.bssm1,1

.bsse2,1

.bssm2,1

.bsse3,1

.bssm3,1

.bssep,1

.bssmp,1

.bssproduct,1

.bsstemp,1

.data

table:

.word2*32768/10;0.2

.word-4*32768/10;-0.4

.word25*32768/100;0.25

.text

start:

STM#STACK+100,SP;设置堆栈指针

LD#x1,DP;设置DP指针为x1所在页

MVPDtable,@x1;将x1和x2传送到数据存储器

MVPDtable+1,@x2

MVPDtable+2,@x3

LD@x1,16,A;将x1规格化为浮点数

EXPA

STT,@e1;保存x1的指数

NORMA

STHA,@m1;保存x1的尾数

LD@x2,16,A;将x2规格化为浮点数

EXPA

STT,@e2;保存x2的指数

NORMA

STHA,@m2;保存x2的尾数

CALLMULT;调用浮点乘法子程序

LD@x3,16,A;将x3规格化为浮点数

EXPA

STT,@e3;保存x3的指数

NORMA

STHA,@m3;保存x3的尾数

CALLMULT

end:

Bend

MULT:

SSBXFRCT

SSBXSXM

LD@e1,A;指数相加

ADD@e2,A

ADD@e3,A

STLA,@ep;乘积指数->ep

LD@m1,T;尾数相乘

MPY@m2,A;乘积尾数在累加器A中

MPY@m3,A;乘积尾数在累加器A中

EXPA;对尾数乘积规格化

STT,@temp;规格化时产生的指数->temp

NORMA

STHA,@mp;保存乘积尾数在mp中

LD@temp,A;修正乘积指数

ADD@ep,A;(ep)+(temp)->ep

STLA,@ep;保存乘积指数在ep中

NEGA;将浮点乘积转换成定点数

STLA,@temp;乘积指数反号,并且加载到T寄存器

LD@temp,T;再将尾数按T移位

LD@mp,16,A

NORMA

STHA,@product;保存定点乘积

RET

.end

编写中断向量表文件:

.title"vectors.asm"

.refstart;伪指令。

声明要引用其他程序中定义的标号start

.sect".vectors";伪指令。

定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致

Bstart;无条件转移到标号start所在的地方执行程序

.end

编写链接命令文件:

vectors.obj/*声明要链接的文件---中断向量表文件的目标文件*/

sy2.obj/*声明要链接的文件---主程序文件的目标文件*/

-osy2.out/*声明链接产生的可执行文件名称,默认为a.out*/

-msy2.map/*声明链接产生的存储器映射文件*/

-estart/*声明主程序入口*/

MEMORY/*关键字加一对{},存储器配置*/

{

PAGE0:

/*程序存储区*/

EPROM:

org=0090Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/

VECS:

org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/

PAGE1:

/*数据存储区*/

SPRAM:

org=1000Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/

DARAM:

org=2000Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/

}

SECTIONS/*关键字加一对{},定位段*/

{

.text:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.data:

>EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.bss:

>SPRAMPAGE1/*将.text段映射或定位到PAGE1的SPRAM区*/

STACK:

>DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/

.vectors:

>VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/

}

运行后的结果:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1