CPU结构及段地址偏移地址的概念
原文地址:http://blog.csdn.net/yihuiworld/article/details/7533335#comments
程序如何执行:
CPU先找到程序在内存中的入口地址 -- 地址总线
(8086有20根地址总线,每一根可以某一时传0或1,
20位的二进制数字可以表示的不同的数字的个数是2^20=1048576
1048576 byte/1024=1024 KB (注:8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1MB=1024kb=1024x1024b)
1024KB/1024=1 MB
所以寻址范围为2的20次方byte=1M
)
因此有多少根地址总线(总线宽度)决定了CPU内存寻址的范围
以上也可以理解为:CPU是多少位的寻址就是2的位的次方,ex:32位CPU寻址范围就是2的32次方=4G
即使此刻内存容量有8G,CPU也只能够利用当中的低4G中的内存地址,高4G地址无法寻址到
然后通过一定的途径将程序输送给CPU存于CPU的对应的寄存器中,再去执行 -- 数据总线
如果CPU需要控制外围设备、是加是减、或是读是写内存等 -- 控制总线
CPU对数据的+-/*等运算 -- 运算器
总结:CPU的组成=寄存器+运算器+控制器+内部总线(连接各种器件在它们之间传送数据)
寄存器 控制器
| |
------------------------------------------- 内部总线
| |
运算器 运算器 CPU结构图
什么是CPU的寄存器:
寄存器分为通用寄存器、段寄存器...
寄存器用于存放CPU要执行的数据或指令
例如:8086CPU的AX通用寄存器结构如下:
物理地址的表示方法:
问题:8086主板地址线20根,所以进行寻址操作一次需要传送20位的二进制数据
但是CPU最大一次只能够传送16位的二进制数据,那如何处理呢?
例子:如何将 两个3位的数 进化为 一个4位数
ex: 234 and 23 --> xxxx
234 ×10 + 23 --> xxxx
↑ ↑ ↑
基地址 偏移地址 --> 物理地址
以上的类似实现在CPU中通过地址加法器实现:
实际内存地址=基地址:偏移地址
实际内存地址=基地址×16(×16进位,类似10进制中的×10进位) + 偏移地址
demo:1402:100
1402H (16进制数 4*4=16位的二进制数) × 16 + 0100
即 14020H --基地址×16
+ 0100H --偏移地址
--------------
14120H --实际物理地址
计算机中是不是这么表示的呢?
WIN+R --> cmd,进入Widows环境下的命令行下 输入debug命令
- C:\Documents and Settings\Administrator>debug
debug工具是DOS/Widows提供的实模式程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。
它可以用于逐指令执行某个程序以验证程序运行的正确性,
也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区等
输入d命令查看寄存器的内容:
- -d
- 0B5D:0100 02 00 EB 0E 50 B0 03 B4-FF E8 9E 00 58 EB 03 E8 ....P.......X...
- 0B5D:0110 1D 01 58 C3 F9 C3 55 51-26 8A 4F 08 34 00 4C 0B ..X...UQ&.O.4.L.
- 0B5D:0120 74 0D 8D 6F 09 E8 19 04-73 08 E8 0E 00 E2 F6 F9 t..o....s.......
- 0B5D:0130 EB 06 2E 89 2E 5D 91 F8-59 5D C3 26 80 7E 00 00 .....]..Y].&.~..
- 0B5D:0140 74 03 45 EB F6 45 C3 2E-80 0E 56 91 10 E8 C6 FF t.E..E....V.....
- 0B5D:0150 72 4A 2E 80 26 56 91 EF-50 2E A1 59 91 2B C6 2E rJ..&V..P..Y.+..
- 0B5D:0160 01 06 57 91 58 2E 8B 36-59 91 2E 80 3C 00 75 26 ..W.X..6Y...<.u&
- 0B5D:0170 2E 80 7C FF 3A 75 09 2E-C7 06 4A 91 09 00 EB 1F ..|.:u....J.....
可以看到物理地址的表示方法都是基地址:偏移地址 ex:0B5D:0100
在CPU中 基地址 存于 段寄存器,偏移地址 存于通用寄存器
CPU结构及段地址偏移地址的概念的更多相关文章
- 物理地址 = 段地址*10H + 偏移地址
程序如何执行: CPU先找到程序在内存中的入口地址 -- 地址总线 (8086有20根地址总线,每一根可以某一时传0或1, 20位的二进制数字可以表示的不同的数字的个数是2^20=1048576 10 ...
- 王爽汇编习题2.2(1):给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 ...
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...
- 物理地址为20位 如10000H 用段地址*16+偏移地址表示
段地质在cpu中,为16位 段地质*16则变成物理首地址20位,这个物理首地址必定是16的倍数. 偏移地址16位, 则表明一个段的大小为64k. 同时也表明16位地址的寻址能力为64kb
- 怎样求结构体成员的偏移地址 || 结构体的 sizeof 总结
C 语言中同意将值为 0 的变量强制转换成任一类型的指针,转换结果是一个NULL指针. (type*)0 // 一个 type 类型的NULL指针 用这个指针訪问结构体内的成员是非法的,可是 & ...
- 汇编语言——物理地址=段地址x16+偏移地址,检测点2.2
一.为什么 物理地址=段地址x16+偏移地址? 刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况 ...
- PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
PE格式第三讲扩展,VA,RVA,FA的概念 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (vi ...
- CPU结构与指令执行过程简介
CPU(Central Processing Unit)是计算机中进行算术和逻辑计算处理指令的主要部件. CPU结构 CPU由通用寄存器组,运算器,控制器和数据通路等部件组成. 寄存器包括 数据寄存器 ...
- 第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. 二丶模块地址(image Base) 模块地址,就是exe加载到内存的时候 ...
随机推荐
- 【Trie】Nikitosh 和异或
[参考博客]: LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie [题目链接]: https://loj.ac/problem/10051 [题意]: 找出两个不相交区 ...
- Wannafly挑战赛23
B. 游戏 大意: $n$堆石子, 第$i$堆初始$a_i$, 每次只能选一堆, 假设一堆个数$x$, 只能取$x$的约数, 求先手第一步必胜取法. SG入门题, 预处理出所有$SG$值. 先手要必胜 ...
- java实现4种内部排序
两种插入类排序: 直接插入排序: public static void insertSort(int[] arr, int len){ for(int i=1; i<len; i++){ int ...
- SqlServer2008 跨服务器同步数据
最近工作中需要跨服务器同步数据,在数据库DB1中的表T1插入数据,同时触发T1的触发器(这里暂不讨论触发器的效率问题),向另一台服务器DB2中的相同的一张表T2插入数据,查看了一些资料说, 需要打开D ...
- 设置centos7中的mysql5.7不区分表名大小写有关操作
1.#which mysqld //查看mysql的命令路径 /usr/sbin/mysqld 2.#/usr/sbin/mysqld --verbose --help | grep ...
- nginx触屏版跟PC的代理设置
server { listen ; set $mobile_rewrite do_not_perform; if ( $http_user_agent ~* "(android|bb\d+| ...
- 复杂度n求数组的第K大值
利用快速排序的方法进行: #include<iostream> using namespace std; int test() { ; return a; } int quickSort( ...
- linux--查看磁盘空间大小使用情况
1. linux查看磁盘空间大小命令 df -h Df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息, 命令格式: df -hl 显示格式为: 文件系统 容量 ...
- arcgis js之调用wms服务
arcgis js之调用wms服务 定义: export const tdtlayer = async () => { let WMSLayer = await arcgisPackage.WM ...
- 14.SpringMVC核心技术-类型转换器
类型转换器 在前面的程序中,表单提交的无论是 int 还是 double 类型的请求参数,用于处理该请求 的处理器方法的形参, 均可直接接收到相应类型的相应数据,而非接收到 String 再手工转换. ...