位赋值:setb P3.2
MOV C,bit 将直接地址的某位值存入进位C。
MOV bit,C 将进位C的值存入直接地址的某位。
STR1,从 0001H 开始?
没有依据。
STR2,从 0009H 开始,是正确的。
下一个单元,应该是 000AH。
VAR1,其内容应该是 09、00。楼主写的正确。
其它内容都是 ASCII 码,应该写成 'a'、'b'。。。
ORG是将当前地址设置为指定值。
例如:
data segment
value1 db 0。
value2 db 1。
data ends
上述定义中,value1的地址即为起始地址,等于0。因为它只占一个字节,所以value2的偏移起始地址为1。而如果:
data segment
value1 db 0。
ORG 10
value2 db 1。
data ends
那么这时,value2的起始地址就是指定的值10。
所以上面这段话,如果在ORG 10H前面没有任何变量定义的话,Dat的地址为10H,即16。Dat占3个字,均为0.因为在这里,内存用?表示未初始化,但全局变量未初始化其值就是0。
所以具体点讲就是Dat占内存10h~15h,且全部为0.。
汇编里面的变量大体上分为两种:全局变量和局部变量,和高级语言差不多。
全局变量的定义就是初始化,比如在数据段中。
a db 064H
a的值就是64H了
数据段中的数据会被编译成一个独立的数据块,在操作系统加载这个程序的时候会把这个数据块一起加载到内存里,在程序没有运行之前,这些数据就已经被初始化好了。
局部变量是在栈中动态分配的,这是他的值不确定的原因,对于局部变量的初始化只要用mov赋值就行了,高级语言其实就是这么做的 。
汇编里面定义局部变量的方法我都忘光了,我就不给你举例子了,你自己看书吧,IBM-PC汇编语言程序设计里面好像有。
在要指定代码的存储空间不是一件特别简单的事情,尤其是你想为某个或某几个函数指定具体的地址。
1,编译器只有在最终的Link阶段才会为代码和数据分配内存地址,因此指定代码段的地址一般是通过写一个link脚本来进行的。Link阶段时,编译器的Linker会读取你写的Link脚本,并且按照脚本的规定给代码分配地址。
2,根据ARM开发工具的不同,link脚本的语法和形式也有所不同。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等开发工具都支持Link脚本。
如果你英文还可以,建议你直接找到开发工具的Help手册去研究。如果你英语实在不行,也可以把开发工具名称和你代码的具体情况告诉我,我帮你看看。