Loading... <!-- wp:audio {"id":176} --> <figure class="wp-block-audio"><audio controls src="https://www.cjovi.icu/usr/uploads/2020/10/04-High-Enough.m4a"></audio><figcaption><span class="has-inline-color has-luminous-vivid-amber-color"><em><span class="external-link"><a class="no-external-link" href="https://music.163.com/#/song?id=2436434" target="_blank"><i data-feather="external-link"></i>high enough</a></span></em></span></figcaption></figure> <!-- /wp:audio --> <!-- wp:paragraph --> <p>今天主要看的是第一章和2.1-2.10,第一章是对硬件的一些介绍,总体上没什么可说的,第二章讲的是寄存器,比较值得记录的是物理地址=段地址*16+偏移地址和CS代码段寄存器,和IP指令指针寄存器。</p> <!-- /wp:paragraph --> <!-- wp:heading {"level":3} --> <h3><strong>物理地址=段地址*16+偏移地址</strong></h3> <!-- /wp:heading --> <!-- wp:paragraph --> <p>8086的地址总线宽度为20,本身却是16位处理器,曾经我不太理解这是怎么做到的,原来是通过段地址加偏移地址做到的,即</p> <!-- /wp:paragraph --> <!-- wp:paragraph {"align":"center"} --> <p class="has-text-align-center"><strong>物理地址=段地址*16+偏移地址</strong></p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>这似乎是一种无奈之举,因为需要较大的内存,但是同时处理器的位数又不够,只好把原来一次寻址可以完成的操作变成两次。这种方法的本质是间接参照,书上的纸条例子讲的很清楚:即一张纸条如果只能写三位数,想表达一个四位数(比如是2599),那么一张写200,另一张写599,算法就是第一张*10+第二张,牺牲次数换取了大小。8086的寻址方式就是这样的一种无奈之举。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>段地址*16很好实现,只要左移四位就行了。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>需要注意的是,分段只是寻址时的分段,内存并没有被实际分段。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>每一个段的大小为2^16字节,即64KB</p> <!-- /wp:paragraph --> <!-- wp:separator --> <hr class="wp-block-separator"/> <!-- /wp:separator --> <!-- wp:heading {"level":3} --> <h3>CS IP</h3> <!-- /wp:heading --> <!-- wp:paragraph --> <p>这是两种最重要的寄存器,可以说没有他们,CPU就没办法工作,因为指令码和数据是在他们的指导下读取的。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>IP被称为指令指针寄存器是很形象的,每一次完成指令的读取,IP都会自加指令的数据数和指令数的和,以指向下一个指令(在内存中的位置)。<strong>而且,更重要的</strong>是,<strong>IP所指向的内存</strong>中的值,<strong>总是指令码</strong>,借此CPU可以分辨何为指令码,何为数据</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>CS被称为代码段寄存器,我的理解是CS所指向的内存段里面就是将要被执行的代码。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>CS和IP要通过地址加法器来计算出物理地址。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>每次CPU复位时,CS被初始化为FFFFH,IP被初始化为0000H,即计算机执行的第一条指令在FFFF0H中。</p> <!-- /wp:paragraph --> 最后修改:2020 年 12 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧