汇编语言学习之“段地址*16+偏移地址=物理地址”的本质
来源:互联网 发布:java形参 编辑:程序博客网 时间:2024/06/05 08:23
我们看一个例子,一个数据为2H,二进制形式为10B,对其进行左移运算:
观察上面移位次数和各种形式数据的关系,我们可以发现:
(1)一个数据的二进制形式左移1位,相当于该数据乘以2;
(2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;
(3)地址加法器如何完成段地址*16的运算?就是将二进制形式存放的段地址左移4位。
进一步思考,我们可看出:一个数据的十六进制形式左移1位,相当于乘以16;一个数据的十进制形式左移1位,相当于乘以10;一个X进制的数据左移1位,相当于乘以X。发散思维。
“ 段地址*16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
下面用两个比喻来说明“基础地址+偏移地址 = 物理地址的思想”
比如说,学校、体育馆、图书馆同在一条笔直的单行路上,学校位于起点,你要去图书馆,问我那里的地址,我可以用两种方式告诉你图书馆的地址:
(1)从学校走2826m到图书馆。这2826m可以认为是图书馆的物理地址。
(2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。第一个距离2000m,是相对于起点的基础地址,第二个距离826m是相对于基础地址的偏移地址。
第二个比喻,比如,只能通过纸条来互相通信,你问我图书馆的地址我只能将它写在纸上告诉你。显然,我必须有一张可以容纳4位数据的纸条,才能写下2826这个数据。
可不巧的是,我没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。
这样我只能这样告诉你数据。
一个是200
一个是826
拿到这个数据后,你要做如下运算处理:
200(段地址)*10+826(偏移地址) = 2826(物理地址)
8086CPU就是这样一个只能提供两张3位数据纸条的CPU。
转自http://www.cnblogs.com/jiqing9006/archive/2013/03/25/2980950.html
- 汇编语言学习之“段地址*16+偏移地址=物理地址”的本质
- 2.7“段地址×16+偏移地址=物理地址”的本质含义
- 关于“物理地址=段基址x16+段内偏移地址”
- 物理地址=段地址向左移1个16进制位+偏移量
- 8086汇编语言 取得一个标号的段地址CS与偏移地址IP
- 段地址与物理地址
- 段地址和偏移地址
- 8086汇编语言 段地址与偏移地址存在CS,IP寄存器中
- 进制转换问题(段地址×16+偏移地址)
- 段地址和偏移地址是什么
- 汇编语言的段地址与偏移地址的一点小心得:8086CPU是为了方便存储段地址才规定其一定是10H的倍数的
- 逻辑地址(段地址,偏移地址)知识点全面回顾
- 逻辑地址(段地址,偏移地址)知识点全面回顾
- 我的词条 之 偏移地址
- 地址的偏移量
- 【汇编学习(一)】8086CPU-段地址-偏移地址简要理解
- [汇编语言]编译后的段地址是什么性质的地址?内存地址吗?
- 为何实模式要采用段地址和偏移地址的方式来寻址
- JVM——深入分析对象的内存布局
- 常用集合方法汇总
- 消息队列实现从一个进程向另一个进程发送一个数据块的方法
- php检测设备
- Median of Two Sorted Arrays
- 汇编语言学习之“段地址*16+偏移地址=物理地址”的本质
- Max retries exceeded with url Error
- LeetCode 404. Sum of Left Leaves 题解
- Alexnet输入大小调整的经验
- 数据结构——线段树
- 152. Maximum Product Subarray Medium
- poj2182 Lost Cows(经典单点更新)
- C++第2次实验:简单计算问题体验
- solr入门--solrJ搜索引擎入门