寄存器(CPU工作原理)03 - 零基础入门学习汇编语言08

第二章:寄存器(CPU工作原理)03

 

让编程改变世界

Change the world by program


 

物理地址

CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 我们将这个唯一的地址称为物理地址。  

16位结构的CPU

概括的讲,16位结构描述了一个CPU具有以下几个方面特征: 1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。  

8086CPU给出物理地址的方法

8086有20位地址总线,可传送20位地址,寻址能力为1M。 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。  

问题:那么,8086CPU如何用内部16位的数据转换成20位的地址呢?

自问自答:8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址~ [caption id="attachment_257" align="aligncenter" width="300"] 8086CPU如何用内部16位的数据转换成20位的地址[/caption]  

8086CPU读写内存时,发生了这么一些事:

CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;

段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

地址加法器将两个16位地址合并成一个20位的地址;

 

地址加法器工作原理

  地址加法器合成物理地址的方法:物理地址=段地址×16+偏移地址 例如:8086CPU访问地址为123C8H的内存单元 [caption id="attachment_258" align="aligncenter" width="300"] 8086CPU访问地址为123C8H的内存单元[/caption]   由段地址×16引发的血案…… “段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位) [caption id="attachment_259" align="aligncenter" width="300"] 进制转换[/caption]   我们通过观察移位次数和各种形式数据的关系:

一个数据的二进制形式左移1位,相当于该数据乘以2;

一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;

地址加法器如何完成段地址×16的运算?没错,以二进制形式存放的段地址左移4位。

  一个馒头引发的分析…… 经过进一步的思考,我们可以看出:

一个数据的十六进制形式左移1位,相当于乘以16;

一个数据的十进制形式左移1位,相当于乘以10;

一个数据的X进制形式左移1位,相当于乘以X。

 

“段地址×16+偏移地址=物理地址”的本质含义

 

两个比喻说明:

说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 比如说,学校、体育馆同在一条笔直的单行路上(学校位于路的起点0米处)。 读者在学校,要去图书馆,问我那里的地址,我可以用几种方式描述这个地址? [caption id="attachment_260" align="aligncenter" width="300"] 段地址×16+偏移地址=物理地址[/caption] (1)从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。 (2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。 第一个距离2000m是相对于起点的基础地址; 第二个距离826m是将对于基础地址的偏移地址。   说明“段地址×16+偏移地址=物理地址”的思想:第二个比喻 比如我们只能通过纸条来通信,读者问我图书馆的地址,我只能将它写在纸上告诉读者。 显然我必须有一张可以容纳 4 位数据的纸条才能写下2826这个数据: [caption id="attachment_261" align="aligncenter" width="235"] 段地址×16+偏移地址=物理地址[/caption]   不巧的是,没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。 这样我只能以这种方式告诉读者2826这个数据: [caption id="attachment_262" align="aligncenter" width="261"] 段地址×16+偏移地址=物理地址[/caption]   8086CPU就是这样一个只能提供两张3位数据纸条的CPU。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LPOBVJBHIWMY']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2010/11/02/3845977.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判别Linux是CentOs还是Ubuntu的最简单方法

在终端执行以下两条命令即可 CentOs:yum -help Ubuntu:apt-get -help

threadgroup_Java ThreadGroup toString()方法与示例

threadgroupThreadGroup类的toString()方法 (ThreadGroup Class toString() method) toString() method is available in java.lang package. toString()方法在java.lang包中可用。 toString() method is used to returns string denotation of this thread group (i.e. this m…

240多个jQuery插件

文件上传(File upload)Ajax File Upload.jQUploader.Multiple File Upload plugin. jQuery File Style.Styling an input type file.Progress Bar Plugin.表单验证(Form Validation)jQuery Validation.Auto Help.Simple jQuery form validation.jQuery XAV - form validations…

解压缩命令

.Tar.gz 解压:Tar zxvf FileName.Tar.gz 压缩:Tar zcvf FileName.Tar.gz DirName 大致总结了一下Linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善&…

Anaconda下安装OpenCV和Tensorflow(最简洁高效的方法)

安装Tensorflow 1,打开Anaconda Navigator 2,手动创建tensorflow环境,这个和你的python版本号一致哈(方法一第一步之后,输入python即可查看当前的版本) 3,手动搜索并下载添加 4,…

Java System类console()方法及示例

系统类console()方法 (System class console() method) console() method is available in java.lang package. console()方法在java.lang包中可用。 console() method is used to return the console object which is uniquely associated with the current JVM(Java Virtual …

使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符

我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序。这就不得不提到子进程中无用文件描述符的问题! fork函数的使用本不是这里讨论的话题,但必须提一下的是:子进程以写时复制(COW,C…

mysql_result 对应mysqli哪个_php – 如何在mysqli中转换mysql_result?

这个代码以前是在mysql中,现在因为它已被弃用,我决定在mysqli中转换我的代码,但是我在我的页面中有这个问题有分页,在它使用mysql之前没有错误,但现在我得到了这一行出错:Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given错误是显而易见的,我知…

Anaconda中下载速度贼慢?

清华镜像 大致步骤如下: 1,windsR输入cmd,打开命令终端页面 输入conda config --set show_channel_urls yes 2,在相应的C盘目录下会生成.condarc文件 3,用记事本或者notepad打开进行替换 channels:- defaults show_c…

Delphi面向对象学习随笔八:物理封装

作者:巴哈姆特http://www.cnpack.org(转载请注明出去并保持完整)前面说过的封装其实是逻辑意义上的封装。逻辑封装是对某一特定逻辑功能模块的封装,这个特定逻辑功能块可以是一个类,当然也可以是一个包,他们…

java 方法 示例_Java扫描器具有示例的NextNextShort()方法

java 方法 示例扫描器类的hasNextShort()方法 (Scanner Class hasNextShort() method) Syntax: 句法: public boolean hasNextShort();public boolean hasNextShort(int rad);hasNextShort() method is available in java.util package. hasNextShort()方法在java.…

mysql创建表时出现1071_mysql 出现1071错误怎么办

mysql 出现1071错误的解决办法:该问题是由键值字段长度过长导致。mysql支持数据库表单一键值的最大长度不能超过767字节,超出这个长度即报错(见标题名称)。一般情况下,不会有键值字段的长度会超出该长度。但是需要注意的是,随着全…

srs rtmp从监听到接收到新连接的过程分析

:分析srs从启动开始的main入口开始。分析rtmp监听端口,然后到接收到新rtmp连接的过程分析。 目录一、流程图二、代码分析1、srs_main_server.cpp:main()2、srs_main_server.cpp:do_main()3、srs_main_server.cpp:run()4、srs_main_server.cpp:run_master…

OpenCV笔记(基于Python)

学习时,将每块注释分别去掉即为一个模块知识点 图像数字化 import numpy as np """ #二维的ndarry #两行四列全是0的uchar类型的二维数组 z np.zeros((2,4),np.uint8) print(type(z)) print(z) print("\n")#两行四列全是1的整型矩阵 o …

POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)

POJ 1222 EXTENDED LIGHTS OUT 基本的开关灯问题.还保证唯一解. 我们把每一个灯泡当成一个状态xi,总共有30个,而且每个灯与其他灯的关系也很明显。所以我们就可以列30方程30个变元的方程组: xi 1 * xi 1 * x(i-1) 1 * x(i1) 1 * x(i-6) …

我看周马,以及3Q大战背后的社会问题

如今闹得不可开交的3Q大战已经成了一道独特的风景线,让我们在茶余饭后又增添了不少谈资。这两个中国最大的客户端软件提供商各有拥趸无数,双方铆足了劲相互吐口水、扔砖头,现在貌似到了动刀子了。周、马在媒体上也都将自己标榜为“美貌与智慧…

Java PushbackReader ready()方法与示例

PushbackReader类ready()方法 (PushbackReader Class ready() method) ready() method is available in java.io package. ready()方法在java.io包中可用。 ready() method is used to check whether this stream is ready to be read or not. ready()方法用于检查此流是否已准…

mysql数据库知识点梳理_MySQL数据库知识点整理 (持续更新中)

一、修改用户密码格式(在命令行下输入):mysqladmin -u 用户名 -p旧密码 password 新密码1. 给root添加密码ab12: mysqladmin -uroot -password ab122. 将root的密码修改为djg345: mysqladmin -uroot -pab12 password djg345二、添加新用户格式:grant…

加载一张照片,可选择是否另存为

加载一张照片,按下S键保存,ESC退出 加载一个灰度图(E:\Python-workspace\yanyu.png),显示图片按下’s’键保存(beyond.png)(保存后的路径和该程序所在路径一致)后退出,或者按下 ESC 键退出不保存 import cv2img cv2.imread(E:\…

RTMP代理的协议规范(RtmpProxy)

RtmpProxy 关于RTMP代理的协议规范。RTMP是字节协议,第一个包是c0,1个字节,一般是03表示是明文的RTMP。所以如果需要做RTMP代理,如果直接转发RTMP客户端的消息,是没法传递额外的信息的,譬如HTTP代理在Head…