
sa+10
这个10是十六进制的10
等于十进制的16
10h=16d
例如在debug中用的数值都当作十六进制来处理
如int 21
这个21是十六进制的21
即21h
只是在debug中不用指明
在masm 或者tasm中要求指明
即int 21h
=========
sa16+0+256=(sa+16)16+0
这个推导过程用十进制来演示是为了更好地说明段的起始地址一定是16(十进制)的倍数
(实模式下段起始地址限于16的倍数
保护模式下段起始地址可是任一字节)
=========
在要指定代码的存储空间不是一件特别简单的事情,尤其是你想为某个或某几个函数指定具体的地址。
1,编译器只有在最终的Link阶段才会为代码和数据分配内存地址,因此指定代码段的地址一般是通过写一个link脚本来进行的。Link阶段时,编译器的Linker会读取你写的Link脚本,并且按照脚本的规定给代码分配地址。
2,根据ARM开发工具的不同,link脚本的语法和形式也有所不同。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等开发工具都支持Link脚本。
如果你英文还可以,建议你直接找到开发工具的Help手册去研究。如果你英语实在不行,也可以把开发工具名称和你代码的具体情况告诉我,我帮你看看。
PAGE 0 是程序空间
PAGE 1 是数据空间
data: {} > DATA PAGE 1
这句话说明data在page1 也就是数据空间
PAGE 1: DATA: origin = 0x2000, length = 0x1000
说明数据空间从0x2000开始,共0x1000这么大,只有一个table在里面,因此table地址是0x2000
start也类似
取指令时,CPU会自动选择代码段寄存器CS,再加上由IP所决定的16位偏移量,得到要取的指令的物理地址。CS一般存储的是代码段基址,与IP指针共同寻找指令的相应物理地址,起计算方法如下:
物理地址=CS2^4+IP
以上就是关于16进制问题全部的内容,包括:16进制问题、在ARM汇编编程中如何指定某段程序的存储地址、DSP 数据段 程序段 划分 标号“table”和“start”的地址分别是什么,分别位于程序空间还是数据空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)