在 X86 处理器中存在着 I/O 空间的概念,I/O 空间是相对于内存空间而言的,它通过特定的指令 in、
out 来访问。端口号标识了外设的寄存器地址。Intel 语法的 in、out 指令格式如下:
IN 累加器, {端口号│DX}
OUT {端口号│DX},累加器
目前,大多数嵌入式微控制器如 ARM、PowerPC 等中并不提供 I/O 空间,而仅存在内存空间。内存空间可
以直接通过地址、指针来访问,程序和程序运行中使用的变量和其他数据都存在于内存空间中。
内存地址可以直接由 C 语言指针操作,例如在 186 处理器中执行如下代码:
unsigned char *p = (unsigned char *)0xF000FF00;
*p=11;
以上程序的意义为在绝对地址 0xF0000+0xFF00(186 使用 16 位段地址和 16 位偏移地址)写入 11
而在 ARM、PowerPC 等未采用段地址的处理器中,p 指向的内存空间就是 0xF000FF00,而*p = 11 就
是在该地址写入 11。
再如,186 处理器启动后会在绝对地址 0xFFFF0(对应 C 语言指针是 0xF000FFF0,0xF000 为段地址,
0xFFF0 为段内偏移)执行,请看下面的代码:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !