51单片机汇编如何定义空数组

如题所述

汇编里没有数组的,定义一个table效果和数组一样的
Table:
0x00,0x00,0x00.....;初始化为0x00
要几个就定义几个
Table就是首地址了追问

我用了,为什么改不了数据呀,还一直都是0x00,急切求答案!我用的是51单片汇编编程!

追答

不可能改不了呀,你程序怎么写的?贴上来看看。

追问

ORG 0000H
AJMP MAIN ;跳转到主程序
MAIN: MOV DPTR,#TABLE
MOV R1,#TABLE
MOV A,55H
MOV @R1,A
MOV A,#0H
MOVC A,@A+DPTR
MOV P1,A
JMP MAIN

TABLE:db 0,0,0

END
你可以写个程序叫我参考下,这个是简单的就是为了测试能不能改数据
请帮我写个程序,最简单的就可以,然后数据用P1存储就可以,我可以用LED等看
现在的主要问题是对R1与R2 中数据进行对比!

追答

变址寻址方式只能对程序存储器进行寻址,因此只能用于读取数据,而不能用于存放数据,它主要用于查表性质的访问。
可以将数据定义在数据存储器ram中而不是程序存储器rom中 rom是只读的 当然是不能修改数据的。

MOV A,55H
而且这句应该是MOV A,#55H吧?

追问

请帮我给段小程序,就是那种有个数据空间可以对进行改变数值,不使用Rn寄存器,我做遥控小车很急的就差这个问题了!
对了,也可以直接开辟一段数据空间,你知道怎么弄吗?帮忙给个程序看看!

追答

不知道你有没有接外部ram?外部ram可以寻址64kb的空间,有的话,你只要把MOVC改成MOVX就好了 因为MOVC取的数据是在rom里 而MOVX取的数据是在外部ram里
如果没有外部ram 那内部30H到7FH是用户ram区 你可以把数据放在这里
比如
MOV DPTR,#0000H;外部ram
MOVX A,@DPTR;此时A的值等于数组第一个元素的值
MOV A,#55H
MOVX @DPTR,A;此时数组第一个元素的值等于55h

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-30
汇编好像还没定义空数组的,只有空指令操作,数组是C的专利
第2个回答  2011-07-30
数组是C语言专有的,汇编没有数组的概念,但可考虑开辟连续的内存单元。追问

具体如何实施,请给出程序说明,谢谢!

第3个回答  2011-07-29
看指令表追问

具体怎么做,我知道可以定义数组,但是不能赋值呀,我做程序用的,帮忙说清楚,现在就在做,需要可以赋值的数组!

追答

51都快忘记了,

追问

就是定义个空数组,指令表没用呀!帮忙想想,现在就在做,很急的!

追答

空数组做什么用?

追问

做依次循环赋值使用!

相似回答