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加载到内存的时候 ...
随机推荐
- 适合新手的160个creakme(四)
这题没有什么特殊字符串,Delphi写的,使用DeDeDark分析一下,找到几个特殊的事件 一个是KeyUp 一个是chkcode 还有就是中间区域的单击或是双击事件 直接跟进去这几个函数,然后找比较 ...
- 二进制协议gob和msgpack介绍
二进制协议gob和msgpack介绍 本文主要介绍二进制协议gob及msgpack的基本使用. 最近在写一个gin框架的session服务时遇到了一个问题,Go语言中的json包在序列化空接口存放的数 ...
- 【bitset】Kth Minimum Clique
#include<bits/stdc++.h> #define B bitset<105> using namespace std; typedef long long ll ...
- 牛客 197E 01串
大意: 给定01串, 单点修改, 询问给定区间$[l,r]$, 假设$[l,r]$从左往右得到的二进制数为$x$, 每次操作增加或减少2的幂, 求最少操作数使得$x$为0. 线段树维护2*2矩阵表示低 ...
- SWATS算法剖析(自动切换adam与sgd)
SWATS算法剖析(自动切换adam与sgd) 战歌指挥官 搬砖.码砖.代查水表.... 27 人赞同了该文章 SWATS是ICLR在2018的高分论文,提出的一种自动由Adam切换为SGD而实现更好 ...
- c# ServiceStack web 搭建
用的是4.5的.net版本 构建model /// <summary> /// 通过id获取资料 /// </summary> //[Route("/GetStude ...
- python3.7 lxml4.2.5 etree xpath 的使用
#2019年10月14日11:08:49 from lxml import html etree = html.etree html = etree.HTML(response_dl.content) ...
- C++ STL 之 string
#include <iostream> #include <string> using namespace std; // 初始化 void test01() { string ...
- How to Change the Default Theme Appearance [editing with no theme]
Windows Live Writer has the ability to allow users to see their blog as it'd be posted as they are c ...
- 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?
“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...