• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

2407的汇编存储问题(汇编的)

我想在.bss上开辟一段空间,然后将结果存放到这段空间(长度为100字)放的数据放在ACC里面,我有一个问题就是怎么将结果存到存储空间里面去,然后再实现地址积存器的自加,直到需要的所有的数据全部存储完毕
我是这样定义这个空间的

大家帮我看看1155739655.asm
全部回复(8)
正序查看
倒序查看
youngboy
LV.2
2
2006-08-17 12:51
可以使用辅助寄存器,通过循环来实现.数据再多也可以方便存储
如:LAR    AR0,#MATRIX     ;传送数据存储的地址
            LAR    AR1,#215 ;216个数据
            LACC   #DATAS_  ;传送数据的地址          
            MAR    *,AR0
INIT_TBL:  
          TBLR   *+,AR1           ; 下一个
            ADD    #1              ; 下一个地址
            BANZ   INIT_TBL,AR0
0
回复
kcw_2005
LV.2
3
2006-08-18 08:31
@youngboy
可以使用辅助寄存器,通过循环来实现.数据再多也可以方便存储如:LAR    AR0,#MATRIX    ;传送数据存储的地址            LAR    AR1,#215;216个数据            LACC  #DATAS_  ;传送数据的地址                      MAR    *,AR0INIT_TBL:            TBLR  *+,AR1          ;下一个            ADD    #1              ;下一个地址            BANZ  INIT_TBL,AR0
我觉得你最好定义一个100的数组,这样的好处是这个为初始化的数组就存放在 bss 段了,将结果放在数组中,再实现数组累加,应该能作出来
0
回复
zhonggorm
LV.1
4
2006-08-18 14:33
大家好:本人現正在開發一種動態LED圖形顯示方案,由于技朮問題遲遲還沒有下產 ,希望可以和更多同行作技朮交流.它不是點陣型的圖型顯示,而是利用動力與掃描時間結合為一体的和種顯示技朮,現只是圖型顯示這方面還有待開發.LYHZHONGGO@126.COM
0
回复
2006-08-18 16:50
@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
0
回复
kcw_2005
LV.2
6
2006-08-19 08:32
@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
回复
kcw_2005
LV.2
7
2006-08-19 09:05
@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
回复
2006-08-19 16:47
@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里面该怎么去做,可以给点提示一下吗?
0
回复
kcw_2005
LV.2
9
2006-08-22 08:17
@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
回复