MAP和FIELD伪操作定义的内存表结构(绝对地址与相对地址的区别)
2012-05-22 20:50
295 查看
分为三种:
1.基于绝对地址的内存表
举例:
用伪操作序列定义一个内存表,其首地址为固定的地址8192(0X2000),该内存表中包括5个数据域。
Consta长度为4个字节;constb长为4个字节,x长为8字节;y长为8字节;string长为16字节。这种内存表成为基于绝对地址的内存表。
MAP 8192 ; //内存表的首地址8192(0x2000)
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为8196
X FIELD 8; // X长为8字节,相对位置为8200
Y FIELD 8; // y长为8字节,相对位置为8208
String FIELD 16 ;// String为16字节,相对位置为8216
在指令中,可以这样引用内存表中的数据域;
LDR R0,consta; //将consta地址处对应内存加载到R0上面的指令仅仅可以访问LDR指令前后4KB地址范围的数据域。
2.基于相对地址的内存表
举例:
下面的伪操作序列定义一个内存表,其首地址为0与R9寄存器值得和,该内存表中包含5个数据域。这种表称为相对地址的内存表。
MAP 0,R9;//内存表的首地址寄存器R9的值
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为4
X FIELD 8; // X长为8字节,相对位置为8
Y FIELD 8; // y长为8字节,相对位置为16
String FIELD 16;// String为16字节,相对位置为24
可以通过下面的指令访问地址范围超过4KB的数据;
ADR R9, Field ; //伪指令
LDR R5,Constb;//相当于LDR R5,[R9,#4]
在这里,内存表中的数据都是相对于R9寄存器的内容,而不是相对于一个固定的地址。通过在LDR中指定不同的基址寄存器的值,定义的内存表结构可以在程序中有多个实例。可多次使用LDR指令,用以实现不同的程序实例。
3.基于PC的内存表
举例:
Data SPACE 100 ; //分配100字节的内存单元,并初始化为0
MAP Data;//内存表的首地址为Datastruc内存单元
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为4
X FIELD 8; // X长为8字节,相对位置为8
Y FIELD 8; // y长为8字节,相对位置为16
String FIELD 16;// String为16字节,相对位置为24
可以通过下面的指令访问范围不超过4kb的数据;
LDR R5,constb ;相当于 LDR R5,[PC,offset]
具体在进行计算的时候,是怎么一回事呢!
1>绝对地址时,是相对于首地址来说的;
2>相对地址时,是相对于上一条指令来说的,在上一条指令的基础上加上地址;
(还是感觉不对,等以后自己在琢磨吧!)
1.基于绝对地址的内存表
举例:
用伪操作序列定义一个内存表,其首地址为固定的地址8192(0X2000),该内存表中包括5个数据域。
Consta长度为4个字节;constb长为4个字节,x长为8字节;y长为8字节;string长为16字节。这种内存表成为基于绝对地址的内存表。
MAP 8192 ; //内存表的首地址8192(0x2000)
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为8196
X FIELD 8; // X长为8字节,相对位置为8200
Y FIELD 8; // y长为8字节,相对位置为8208
String FIELD 16 ;// String为16字节,相对位置为8216
在指令中,可以这样引用内存表中的数据域;
LDR R0,consta; //将consta地址处对应内存加载到R0上面的指令仅仅可以访问LDR指令前后4KB地址范围的数据域。
2.基于相对地址的内存表
举例:
下面的伪操作序列定义一个内存表,其首地址为0与R9寄存器值得和,该内存表中包含5个数据域。这种表称为相对地址的内存表。
MAP 0,R9;//内存表的首地址寄存器R9的值
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为4
X FIELD 8; // X长为8字节,相对位置为8
Y FIELD 8; // y长为8字节,相对位置为16
String FIELD 16;// String为16字节,相对位置为24
可以通过下面的指令访问地址范围超过4KB的数据;
ADR R9, Field ; //伪指令
LDR R5,Constb;//相当于LDR R5,[R9,#4]
在这里,内存表中的数据都是相对于R9寄存器的内容,而不是相对于一个固定的地址。通过在LDR中指定不同的基址寄存器的值,定义的内存表结构可以在程序中有多个实例。可多次使用LDR指令,用以实现不同的程序实例。
3.基于PC的内存表
举例:
Data SPACE 100 ; //分配100字节的内存单元,并初始化为0
MAP Data;//内存表的首地址为Datastruc内存单元
Consta FIELD 4 ; //consta 长为4字节,相对位置为0
Constb FIELD 4; //constb长为4字节,相对位置为4
X FIELD 8; // X长为8字节,相对位置为8
Y FIELD 8; // y长为8字节,相对位置为16
String FIELD 16;// String为16字节,相对位置为24
可以通过下面的指令访问范围不超过4kb的数据;
LDR R5,constb ;相当于 LDR R5,[PC,offset]
具体在进行计算的时候,是怎么一回事呢!
1>绝对地址时,是相对于首地址来说的;
2>相对地址时,是相对于上一条指令来说的,在上一条指令的基础上加上地址;
(还是感觉不对,等以后自己在琢磨吧!)
相关文章推荐
- 内存空间 逻辑地址空间 相对地址 绝对地址
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- JavaWeb开发中访问的地址是否有斜杠“/”(绝对路径和相对路径)的区别
- 绝对地址与相对地址的区别
- 相对地址与绝对地址的区别
- [转]绝对地址和相对地址的区别,为什么要采用绝对地址?
- 绝对路径与相对路径的区别【2】--release和debug这两种情况下对本地文件操作不一致的问题
- ldr与adr的区别 (相对地址 和 绝对地址)
- Oracle下绝对文件号和相对文件号区别
- C学习笔记 7 写出一个宏,求任意结构体成员相对于结构体首地址的偏移。
- 相对地址和绝对地址【权威】
- (转)相对路径和绝对路径的区别,java获取项目访问路径的方法
- 常见图像格式类型区别及使用说明&绝对路径和相对路径的使用场景&css3实现loading效果
- 相对路径和绝对路径的区别
- 用" #include<absacc.h> “ 即可使用其中定义的宏来访问绝对地址
- 绝对地址和相对地址对SEO有什么不同
- 相对路径和绝对路径的区别
- 关于内存对齐以及通过偏移获得结构地址
- 此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址空间碎片造成的。请稍后重试。
- class和struct的区别以及类的内存结构