我想在.bss上开辟一段空间,然后将结果存放到这段空间(长度为100字)放的数据放在ACC里面,我有一个问题就是怎么将结果存到存储空间里面去,然后再实现地址积存器的自加,直到需要的所有的数据全部存储完毕
我是这样定义这个空间的
大家帮我看看1155739655.asm
2407的汇编存储问题(汇编的)
全部回复(8)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@youngboy
可以使用辅助寄存器,通过循环来实现.数据再多也可以方便存储如:LAR AR0,#MATRIX ;传送数据存储的地址 LAR AR1,#215;216个数据 LACC #DATAS_ ;传送数据的地址 MAR *,AR0INIT_TBL: TBLR *+,AR1 ;下一个 ADD #1 ;下一个地址 BANZ INIT_TBL,AR0
有个问题想请教一下:我要在.bss 开辟一段长为200字的数据区,使用 下面两条条语句那条是合适的 MP/MC=1
下面那个程序可以实现将所采集到的值存储到所开辟的 ADRESULT这段存储空间里面去,还是两个都不可以,需要怎么修改一下.麻烦你帮我看看了:)
.bss ADRESULT 200(这个数据段是不是在b1里面?)
下面的程序可以实现将所采集到的值存储到所开辟的 ADRESULT这段存储空间里面去吗
LAR AR0,#ADRESULT
LAR AR1,#199
LACC #RESULT
MAR *,AR0
INIT_TBL
TBLR *+,AR1
ADD #1
BANZ INIT_TBL,AR0
ADRESULT .usect "adresult" 200(这个数据段也是在b1里面吗)
LAR AR0,#ADRESULT
LAR AR1,#199
LACC #RESULT
MAR *,AR0
INIT_TBL
TBLR *+,AR1
ADD #1
BANZ INIT_TBL,AR0
下面那个程序可以实现将所采集到的值存储到所开辟的 ADRESULT这段存储空间里面去,还是两个都不可以,需要怎么修改一下.麻烦你帮我看看了:)
.bss ADRESULT 200(这个数据段是不是在b1里面?)
下面的程序可以实现将所采集到的值存储到所开辟的 ADRESULT这段存储空间里面去吗
LAR AR0,#ADRESULT
LAR AR1,#199
LACC #RESULT
MAR *,AR0
INIT_TBL
TBLR *+,AR1
ADD #1
BANZ INIT_TBL,AR0
ADRESULT .usect "adresult" 200(这个数据段也是在b1里面吗)
LAR AR0,#ADRESULT
LAR AR1,#199
LACC #RESULT
MAR *,AR0
INIT_TBL
TBLR *+,AR1
ADD #1
BANZ INIT_TBL,AR0
0
回复
提示
@snoopopy415
有个问题想请教一下:我要在.bss开辟一段长为200字的数据区,使用下面两条条语句那条是合适的 MP/MC=1下面那个程序可以实现将所采集到的值存储到所开辟的ADRESULT这段存储空间里面去,还是两个都不可以,需要怎么修改一下.麻烦你帮我看看了:).bss ADRESULT 200(这个数据段是不是在b1里面?)下面的程序可以实现将所采集到的值存储到所开辟的ADRESULT这段存储空间里面去吗LAR AR0,#ADRESULTLAR AR1,#199LACC#RESULTMAR *,AR0INIT_TBL TBLR *+,AR1 ADD #1 BANZ INIT_TBL,AR0ADRESULT .usect "adresult" 200(这个数据段也是在b1里面吗)LAR AR0,#ADRESULTLAR AR1,#199LACC#RESULTMAR *,AR0INIT_TBL TBLR *+,AR1 ADD #1 BANZ INIT_TBL,AR0
一般的将bss段放在数据存储器得外部 RAM,地址一般分配为0X8000,长度为0x7ff0,你上面的第二个程序的usect,应该是你自己定义的段吧,那根据你的需要可以定义到B1或外部RAM,一般的将B0B1合起来用做软件堆栈,所以你那个段放在外部RAM或者B2或者SARAM.
0
回复
提示
@snoopopy415
有个问题想请教一下:我要在.bss开辟一段长为200字的数据区,使用下面两条条语句那条是合适的 MP/MC=1下面那个程序可以实现将所采集到的值存储到所开辟的ADRESULT这段存储空间里面去,还是两个都不可以,需要怎么修改一下.麻烦你帮我看看了:).bss ADRESULT 200(这个数据段是不是在b1里面?)下面的程序可以实现将所采集到的值存储到所开辟的ADRESULT这段存储空间里面去吗LAR AR0,#ADRESULTLAR AR1,#199LACC#RESULTMAR *,AR0INIT_TBL TBLR *+,AR1 ADD #1 BANZ INIT_TBL,AR0ADRESULT .usect "adresult" 200(这个数据段也是在b1里面吗)LAR AR0,#ADRESULTLAR AR1,#199LACC#RESULTMAR *,AR0INIT_TBL TBLR *+,AR1 ADD #1 BANZ INIT_TBL,AR0
我觉得这两个程序都有问题,问题在那个表读指令是把定义在程序空间的一段值给200数组ADRESULT,但是你的值是采样来的,值不应该放在程序空间,比如我事先定义一个数据段,data.下面放200个常数值,再读这个表是没问题的,因为凡是初始化的段都放在程序空间,为初始化的放在数据空间,所以你这个表读指令有问题,除非你的数据来源就在程序空间
0
回复
提示
@kcw_2005
我觉得这两个程序都有问题,问题在那个表读指令是把定义在程序空间的一段值给200数组ADRESULT,但是你的值是采样来的,值不应该放在程序空间,比如我事先定义一个数据段,data.下面放200个常数值,再读这个表是没问题的,因为凡是初始化的段都放在程序空间,为初始化的放在数据空间,所以你这个表读指令有问题,除非你的数据来源就在程序空间
谢谢你一直这么认真的回复,其实我对.usect和.bss这两个分配弄的不是很清楚,我一直以为它们总是分配在数据存储区里,和程序存储区没有什么联系,我在一本书上看到这样去定义一个转换A/D的结果积存器
.data
ADRESULT .word 00h(这是将ADRESULT放在程序存储区,同时其初始值为0)
然后在存储转换结果的时候是先将结果放在ACC里面再采用下面的语句
SACH ADRESULT (A/D的采样结果放在ACC里面的高十六位,这条语句直接取其高位放在ADRESULT)
我就试着照这样去做了,但是在ADRESULT里面怎么也看不到采样的结果值,这是为什么?
如果我想将这200个数组定义在b1里面该怎么去做,可以给点提示一下吗?
.data
ADRESULT .word 00h(这是将ADRESULT放在程序存储区,同时其初始值为0)
然后在存储转换结果的时候是先将结果放在ACC里面再采用下面的语句
SACH ADRESULT (A/D的采样结果放在ACC里面的高十六位,这条语句直接取其高位放在ADRESULT)
我就试着照这样去做了,但是在ADRESULT里面怎么也看不到采样的结果值,这是为什么?
如果我想将这200个数组定义在b1里面该怎么去做,可以给点提示一下吗?
0
回复
提示
@snoopopy415
谢谢你一直这么认真的回复,其实我对.usect和.bss这两个分配弄的不是很清楚,我一直以为它们总是分配在数据存储区里,和程序存储区没有什么联系,我在一本书上看到这样去定义一个转换A/D的结果积存器 .dataADRESULT .word 00h(这是将ADRESULT放在程序存储区,同时其初始值为0)然后在存储转换结果的时候是先将结果放在ACC里面再采用下面的语句SACH ADRESULT(A/D的采样结果放在ACC里面的高十六位,这条语句直接取其高位放在ADRESULT)我就试着照这样去做了,但是在ADRESULT里面怎么也看不到采样的结果值,这是为什么?如果我想将这200个数组定义在b1里面该怎么去做,可以给点提示一下吗?
我认为在data段存是可以的,累加器的高十六位放在ADRESULT中,你应该再看看之前的ACC中值的格式是Q多少,我给你会过了,在bss段中存200个,用你以前的表读指令好像不行
0
回复
提示