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加载到内存的时候 ...
随机推荐
- hdu 1029 求出现次数过半的数
题目传送门//res tp hdu 已知必定存在一个元素出现次数超过一半,考虑用栈 若当前元素等于栈顶元素,入栈,反之出栈,并将当前元素入栈 最终的栈顶元素即是所求 #include<iostr ...
- c++:论如何成功把自己搞懵【二叉树特辑①】(不定期更新)
并不正经的前言 以前我这个小白看OI的书,老觉得有些东西很高端(看不懂的自然就很高端[滑稽]):什么栈啊,位运算啊,二叉树啊.有些东西我学了之后也很迷糊(真的不是因为傻?),做题的时候总是可以把自己搞 ...
- LC 494. Target Sum
问题描述 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 ...
- PHP和js判断访问设备是否是微信浏览器实例
PHP和js判断访问设备是否是微信浏览器实例,代码非常精简,适合新手学习. js判断是否是微信浏览器: 1 function is_weixin() { 2 var ua = window.navig ...
- python+selenium+webdriver+BeautifulSoup实现自动登录
from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...
- 第十三章 ZYNQ-MIZ702 PL中断请求
本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015 ...
- 第六章 ZYNQ-MIZ701 GPIO使用之MIO
6.0 本章难度系数★★☆☆☆☆☆ 6.1 GPIO简介 Zynq7000系列芯片有54个MIO(multiuse I/O),它们分配在 GPIO 的Bank0 和Bank1隶属于PS部分,这些I ...
- Mysql数据库的优化(本文摘自于网络,文章末端有原文链接)
对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要.一 般来说,要保证数据库的效率,要做好以下四个方面的工作: ① 数据库设计 ② sql语句优化 ③ 数据库参数配置 ...
- 使用jenkins 构建时,字体图标报错的问题。
最近一个项目开发中,我们在本地进行项目打包时,可以正常打包. 但是在使用jenkins构建时,一直报错,提示无法加载字体文件.can't resolve module '....xxxx.TTF ' ...
- 面试官:Kafka 如何优化内存缓冲机制造成的频繁 GC 问题?
Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Ka ...