汇编语言复习摘要二——寄存器

CPU中的主要部件是寄存器,寄存器是CPU中程序员可以用指令来读写的部件。通过改变各种寄存器中的内容来实现对CPU的控制。8086CPU有14个寄存器,这里不一一列举。

 

1. 通用寄存器:8086CPU的所有寄存器都是16位的,也就是可以存放两个字节。四个通用寄存器:AX,BX,CX,DX,通常用来存放一般性的数据。

一个16位的寄存器可以存放的最大数值是FFFFH。每个寄存器可分为两个可独立使用的8位寄存器:

AX分为AH和AL;BX分为BH和BL;CX分为CH和CL;DX分为DH和DL,H和L分别表示高8位和低8位。

 

2. 字在寄存器中存储:一个字节是8bit,即一个byte,一个字则是两个字节组成,16个bit,2个byte。所以8086CPU寄存器刚好用来存放一个字。

 

3. 几条汇编指令:太简单了,mov, add而已。要注意的是,像AL和AH这样作为独立使用的寄存器,它们之间是没有关系的。

比如说,执行:mov al, 123H;结果是al的值为23H,最高位的1被丢弃,因为存储不下了,但是并不会存储到ah中,因为要记住,ah和al是相互独立的。

在进行数据传送和运算时,要注意指令的两个操作对象的位数应该是要一致的。比如:mov ax, bx,正确;mov ax, bl,错误。前面是16位,后面的存储器是8位,不一致。

 

4. 16位CPU:这意味着什么?就是CPU一次能处理、传输、暂时存储的信息的最大长度是16位。

 

5. 8086CPU寻址方法:太重要了。8086CPU有20位地址总线,寻址能力为1MB,2^20 = 1MB。而8086CPU是16位的,如何达到20位的寻址?答案是采用两个16位地址合成的方法来形成一个20位的物理地址。这两个地址,一个被称作段地址,另外一个被称作偏移地址。处理流程大概如下:

1) 段地址和偏移地址一起送入一个称作地址加法器的部件;

2)地址加法器算出结果,得到20位的物理地址;

3)结果送入输入输出控制电路;

4)输入输出电路将结果送到地址总线;

5)结果被地址总线传送到存储器;

地址加法器采用这样的计算方法:段地址×16 + 偏移地址 = 物理地址。比如要访问地址12345H,段地址为1230H,偏移地址为0045H,地址加法器这样计算:1230H × 16 + 0045H = 12345H。为什么段地址是1230H?不可以是其他地址吗?答案是可以的:

 

6. 寻址的本质含义:太重要了。如何理解“段地址×16 + 偏移地址 = 物理地址”?内存并没有被分段,段的划分来自CPU而已。如何确定段地址和偏移地址真的不重要,只要你通过段地址和偏移地址得到了最后正确的地址,那么你用任何划分都是可以的。比如,21F60H物理地址,如何寻址?可以采用下面的划分:段地址2000H,偏移地址1F60H;段地址2100H,偏移地址0F60H;等等,只要能算出正确的结果,怎么划分都不重要。所以,这里有一个重要的结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。

在8086CPU中,存储单元的地址用两个元素来描述,即段地址和偏移地址。所以一般不说:数据在21F60H内存单元中,而是说:数据存在内存2000:1F60单元中。即要用段地址和偏移地址描述。

 

7。 CS和IP:8086CPU有4个段寄存器:CS,DS,SS,ES。CS和IP是两个最关键的寄存器,因为它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。任何时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M × 16 + N 单元开始,读取一条指令并执行。可以说,CPU将CS:IP指向的内容当作指令执行。CPU读取执行指令的流程为:

1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;

2)IP = IP + 所读取的指令长度,从而指向了下一条命令的地址;

3)执行指令,这个由执行控制器来进行,然后,又回到第一步,循环执行;

 

8. 修改CS、IP指令:通过命令jmp来进行修改,不能使用mov CS,ax来修改。

转载于:https://www.cnblogs.com/python_newbie/archive/2010/09/23/1833448.html

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

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

相关文章

ListString^^ 引用空间

莫名其妙报错 需要在.h和.cpp文件中都引用: using namespace System::Collections;using namespace System::Collections::Generic;转载于:https://www.cnblogs.com/dot-dot-123/p/3481717.html

[html] 如何实现默认显示git的第一帧图片,当鼠标经过时,播放完整的gif动画

[html] 如何实现默认显示git的第一帧图片,当鼠标经过时,播放完整的gif动画 准备一个静态第一帧的 img 图片,和gif完整图片,来回切换,就可以完成效果个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃…

u盘运行linux系统卡住了,从U盘运行Linux操作系统的三种方法

从U盘运行Linux操作系统的三种方法你或许听说过在U盘上运行live Linux操作系统,但你知不知道可以永久的保存运行时的数据,或者直接将Linux安装到U盘?本文将介绍把Linux装进口袋(U盘)的三种方法,挑一种你最喜欢的方法吧&#xff01…

全屏模式

<mx:Button label"全屏" click"stage.displayState StageDisplayState.FULL_SCREEN" /> <mx:Button label"窗口" click"stage.displayState StageDisplayState.NORMAL" /> <mx:Button label"全屏交互" cli…

[html] html页面中如何实现gif图片重新播放?

[html] html页面中如何实现gif图片重新播放&#xff1f; 因为浏览器会缓存图片&#xff0c;所以对于一次性gif如果不做处理的话&#xff0c;只会播放一次。如果需要重新播放gif&#xff0c;重新设置下img标签的src属性即可个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前…

python 绘图与可视化 Graphviz 二叉树 、 error: Microsoft Visual C++ 14.0 is required

需要对二叉树的构建过程进行可视化&#xff0c;发现了这个Graphviz软件&#xff0c;他对描绘数据间的关系十分擅长。 下载链接&#xff1a;https://graphviz.gitlab.io/_pages/Download/Download_windows.html 安装好后需要把安装路径添加到Path中 下载python的插件graphviz 问…

linux下统计文件的数目,Linux下如何统计文件数目

若只是查看当前目录下的文件数目(除开.和..文件),使用下面的命令&#xff1a;$ find ./ -type f | wc -l若查看当前目录下面的所有文件&#xff0c;含.和..使用如下命令即可&#xff1a;$wc -lps&#xff1a;find command and wc command1、FIND命令NAMEfind - search for file…

Delphi编程修改ProgressBar的颜色

delphi编程修改ProgressBar的颜色关键代码如下&#xff1a;uses CommCtrl; procedure TForm1.Button1Click(Sender: TObject); begin // Set the Background color to teal Progressbar1.Brush.Color : clTeal; // Set bar color to yellow SendMessage(ProgressBar1.Handle, P…

sql 中优化视图或sql语句的执行效率的方法

参见引用http://www.alixixi.com/program/a/2010062662233.shtml转载于:https://www.cnblogs.com/thornfield_he/archive/2010/09/28/1837811.html

删除数据库的表中某字段的值《转》

方法一&#xff1a; update 表名 set 字段名NULL 方法二&#xff1a; update 表名 set 字段名 转载于:https://www.cnblogs.com/LceMeaning/p/3415711.html

linux分区从1开始,Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作&#xff0c;以至于后期&#xff0c;不了解什么是分区以及分区当中最基本的一些概念&#xff0c;我们不说最细的知识&#xff0c;只求了解这个过程&#xff0c;那直接步入正题&#xff0c;开始第一节的学习。开…

理解Javascript_02_理解undefined和null

来自普遍的回答: 其实在 ECMAScript 的原始类型中&#xff0c;是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值&#xff0c;即undefined 和 null。 值 undefined 实际上是从值 null 派生来的&#xff0c;因此 ECMAScript 把它们定义为相等的&#…

服务器虚拟多台linux,VirtualBox环境下基于多台Ubuntu虚拟机的Hadoop分布式计算环境搭建...

export PATH$HADOOP_HOME/bin:$PATH接下来需要修改hadoop/conf/目录下的配置文件&#xff0c;共有6个文件需要修改&#xff0c;分别是masters、slaves、core-site.xml、mapred-site.xml、hdfs-site.xml、hadoop-env.sh&#xff0c;修改如下文件mastersUB01文件slavesUB02UB03文…

程序员的培养

作者: RayChase 来源: ITeye 发布时间: 2012-05-22 09:01 阅读: 2335 次 原文链接 全屏阅读  [收藏] 这篇文字是我好久以来的想法&#xff0c;有一些感悟&#xff0c;有一些激烈的言辞&#xff0c;我很自豪我就是一名程序员&#xff0c;我希望给程序员或者前程序员们带来…

[html] 你最喜欢html的哪个标签?为什么?

[html] 你最喜欢html的哪个标签&#xff1f;为什么&#xff1f; div&#xff0c;因为此标签是用得最多的也是最强大的HTML标签&#xff0c;许多其它标签也是基于此标签而产生的。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一…

linux普通用户发送信号,Linux信号发送与作业控制

前言Linux中进程间通信又称为IPC(Inter process communication)&#xff0c;大致上可以分为这么几类&#xff1a;消息队列(message queue)&#xff0c;旗语(semerpore)&#xff0c;共享内存(shared memory)&#xff0c;信号(signal)&#xff0c;Unix域套接字&#xff0c;socket…

[html] 写一个三栏布局,中间固定,两边自适应(平均)

[html] 写一个三栏布局&#xff0c;中间固定&#xff0c;两边自适应&#xff08;平均&#xff09; <style>html,body {height: 100%;margin: 0;padding: 0;}.container {display: flex;flex-wrap: wrap;width: 100%;height: 100%;}.content {flex: 1;}.side,.right {wid…

《图解CSS3:核心技术与案例实战》

《图解CSS3&#xff1a;核心技术与案例实战》 基本信息 作者&#xff1a; 大漠 丛书名&#xff1a; Web开发技术丛书 出版社&#xff1a;机械工业出版社 ISBN&#xff1a;9787111469209 上架时间&#xff1a;2014-7-2 出版日期&#xff1a;2014 年7月 开本&#xff1a;16开 …

对页面文章过长的处理方法

当在 一个页面显示一个文章的内容时&#xff0c;如果文章太长&#xff0c;会造成页面无限高&#xff0c;样式很不好看&#xff0c;对此我有两种解决方法&#xff1a;一&#xff0c;将内容放在<div>标签中&#xff0c;然后设置标签的style&#xff0c;具体<div style&q…

kali linux重启网络服务报错,Web安全学习笔记之在Kali Linux上安装Openvas以及启动失败修复...

现在用的kali linux是2018.1的版本&#xff0c;在安装openvas的时候报错&#xff0c;无法通过网络下载和安装openvas。主要错误是源配置错误&#xff0c;可能现在用的kali很久没更新了。一、解决和配置更新源问题apt-get upgrade报错显示无法更新&#xff0c;apt-get install o…