博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
段寄存器
阅读量:6803 次
发布时间:2019-06-26

本文共 1062 字,大约阅读时间需要 3 分钟。

.段寄存器

8086CPU在访问内存时是要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段地址存放在段寄存器中,8086CPU有4个段寄存器:CS, DS, SS,ES。

.CS和IP

CS和IP寄存器,指示了CPU当前要读取指令的地址。CS为段寄存器,IP为指令指针寄存器。

在8086CPU中,设CS内容为M,IP中内容为N,8086CPU将从M*16+N单元开始,读取一条指令并执行。也可以这样描述,任意时刻,CPU将CS:IP指向的内容当做指令执行。

8086CPU的工作过程可以简要描述如下:

.修改CS,IP的指令

8086CPU大部分寄存器的值,都可以用mov开修改,比如通用寄存器ax bx cx dx等,mov指令被称为传送指令。但是mov指令不能修改CS,IP的值,8086没有为mov提供这个功能,但是提供了另外的的指令来改变他们的值,能够改变CS,IP的内容指令被系统称为转移指令。先介绍一个最简单可以修改CS,IP的指令:jmp指令。

若想同时修改CS,IP的内容,可用形如:jmp 段地址:偏移地址     的指令来完成。

eg:

jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。

jmp 段地址:偏移地址  指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。

如想要仅仅修改IP的内容,可用“jmp 某一合法寄存器”的指令完成。

eg:

jmp  ax,指令执行前:ax=1000H,CS=2000H,IP=0003H

      指令执行后:ax=1000H,CS=1000H,IP=1000H

jmp 某一合法寄存器   指令的功能为:用寄存器中的值修改IP

jmp  ax,在含义上如同mov IP,ax一样,虽然mov IP,ax这样的指令是错误的,但是用汇编语言来形容汇编语言能更好帮助理解和记忆。

 

 

如果看了内存机器码和对应汇编指令不能得到上面的分析结果,回看P33页。

.代码段

我们将长度为N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以说这段内存是用来存放代码的,从而定义了一个代码段。为什么N<=64KB,段寄存器和偏移指针决定了指令在哪里执行,因为IP是16位的寄存器,所以最大寻址2的16次方即64KB。你可能会说,不是还有CS*16+IP吗,那不是该远远大于64KB的呀,可是寻址能力指的是在首地址确定后,能够偏移多少地址,所以偏移最多16位,等于64KB。

 

转载地址:http://fijwl.baihongyu.com/

你可能感兴趣的文章
数学是中文字型设计的短板
查看>>
TYVJP1933 绿豆蛙的归宿
查看>>
HDU 2151 Worm
查看>>
c# 操作Word总结(车)
查看>>
js刷新页面方法大全
查看>>
阿花宝宝 Java基础笔记 之 流程控制(一)
查看>>
算法2
查看>>
单调递增最长子序列
查看>>
18、设计模式-行为型模式-迭代器模式
查看>>
ZOJ 1058 Currency Exchange
查看>>
Extjs4.2纯前台导出Excel总结
查看>>
electron入门笔记(三)- 引入bootstrap
查看>>
【uva 11572】Unique Snowflakes(算法效率--滑动窗口,3种实现方法)
查看>>
XML参考 :XmlReader 详解、实例
查看>>
PHP 导入Excel数据 到数据库
查看>>
子帐 SLA(SubLedger Accounting)
查看>>
HTML 5中的重要元素:文本元素(time元素、mark元素、cite元素)
查看>>
在Lua中计算含中文的字符串的长度
查看>>
Python体验(08)-图形界面之工具栏和状态栏
查看>>
js字符串截取
查看>>