我想在.bss上開辟一段空間,然后將結果存放到這段空間(長度為100字)放的數據放在ACC里面,我有一個問題就是怎么將結果存到存儲空間里面去,然后再實現地址積存器的自加,直到需要的所有的數據全部存儲完畢
我是這樣定義這個空間的
大家?guī)臀铱纯?a target="_blank">1155739655.asm
2407的匯編存儲問題(匯編的)
全部回復(8)
正序查看
倒序查看
@youngboy
可以使用輔助寄存器,通過循環(huán)來實現.數據再多也可以方便存儲如:LAR AR0,#MATRIX ;傳送數據存儲的地址 LAR AR1,#215;216個數據 LACC #DATAS_ ;傳送數據的地址 MAR *,AR0INIT_TBL: TBLR *+,AR1 ;下一個 ADD #1 ;下一個地址 BANZ INIT_TBL,AR0
有個問題想請教一下:我要在.bss 開辟一段長為200字的數據區(qū),使用 下面兩條條語句那條是合適的 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字的數據區(qū),使用下面兩條條語句那條是合適的 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字的數據區(qū),使用下面兩條條語句那條是合適的 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這兩個分配弄的不是很清楚,我一直以為它們總是分配在數據存儲區(qū)里,和程序存儲區(qū)沒有什么聯系,我在一本書上看到這樣去定義一個轉換A/D的結果積存器
.data
ADRESULT .word 00h(這是將ADRESULT放在程序存儲區(qū),同時其初始值為0)
然后在存儲轉換結果的時候是先將結果放在ACC里面再采用下面的語句
SACH ADRESULT (A/D的采樣結果放在ACC里面的高十六位,這條語句直接取其高位放在ADRESULT)
我就試著照這樣去做了,但是在ADRESULT里面怎么也看不到采樣的結果值,這是為什么?
如果我想將這200個數組定義在b1里面該怎么去做,可以給點提示一下嗎?
.data
ADRESULT .word 00h(這是將ADRESULT放在程序存儲區(qū),同時其初始值為0)
然后在存儲轉換結果的時候是先將結果放在ACC里面再采用下面的語句
SACH ADRESULT (A/D的采樣結果放在ACC里面的高十六位,這條語句直接取其高位放在ADRESULT)
我就試著照這樣去做了,但是在ADRESULT里面怎么也看不到采樣的結果值,這是為什么?
如果我想將這200個數組定義在b1里面該怎么去做,可以給點提示一下嗎?
0
回復
@snoopopy415
謝謝你一直這么認真的回復,其實我對.usect和.bss這兩個分配弄的不是很清楚,我一直以為它們總是分配在數據存儲區(qū)里,和程序存儲區(qū)沒有什么聯系,我在一本書上看到這樣去定義一個轉換A/D的結果積存器 .dataADRESULT .word 00h(這是將ADRESULT放在程序存儲區(qū),同時其初始值為0)然后在存儲轉換結果的時候是先將結果放在ACC里面再采用下面的語句SACH ADRESULT(A/D的采樣結果放在ACC里面的高十六位,這條語句直接取其高位放在ADRESULT)我就試著照這樣去做了,但是在ADRESULT里面怎么也看不到采樣的結果值,這是為什么?如果我想將這200個數組定義在b1里面該怎么去做,可以給點提示一下嗎?
我認為在data段存是可以的,累加器的高十六位放在ADRESULT中,你應該再看看之前的ACC中值的格式是Q多少,我給你會過了,在bss段中存200個,用你以前的表讀指令好像不行
0
回復