CPU Segments

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

CPU Segments

eryar@163.com

1.Introduction

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

CS为Code Segment,代码段寄存器,结合指令指针寄存器IP(Instruction Pointer)来确定要执行的下一条指令的内存地址;

DS为Data Segment,数据段寄存器;

SS为Stack Segment,栈段寄存器;

ES为Extra Segment,附加寄存器;

我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址来访问段内的单元,这完全是我们自己来安排。我们可以设定一个段存放数据,将它定义为DS;设定一个段存放代码,将它定义为CS;设定一个段当作栈,将它定义为SS。

对于数据段,将它的地址放在DS寄存器中,用mov, add, sub等访问内存单元时,CPU就将我们定义的数据段中的内容当作数据来访问;

对于代码段,将它的地址放在CS寄存器中,将段第一条指令的偏移地址放在IP中,这样CPU就将执行我们定义的代码段中的指令;

对于栈段,将它的段地址放在SS寄存器中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作时,比如执行push, pop指令,就将我们定义的栈段当作栈空间来使用。

2. Data Segment

通过DS寄存器,可以设置任意内存中的数据。

mov ax , 1000  

mov ds
, ax 

mov ax
, 1123  

mov [
0 ] , ax 

 

wps_clip_image-16116

wps_clip_image-30111

由上图可知,可以通过数据段寄存器DS来设置内存中的数据。

3. Stack Segment

现在的CPU中都有栈的设计,8086CPU也不例外。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,在基于8086CPU编程时,可以将一段内存当作栈来使用,并提供了入栈和出栈的指令push, pop。那么问题来了,如何任性地指定哪段内存作为栈来使用呢?8086CPU中提供了两个寄存器SS和SP来完成这项任务。栈顶的段地址存放在段寄存器SS中,偏移地址存放在SP中。这个用法和CS:IP的用法是一样的。

mov ax , 1000  

mov ss
, ax 

mov ds
, ax 

mov ax
, 10  

mov sp
, ax 

push  ax 

 

wps_clip_image-29098

将上述代码通过A命令,输入到Debug程序中。

wps_clip_image-7124

通过命令T来执行上述代码。

wps_clip_image-1832

通过两次push,将1000:000E处和1000:000C处的值设置成了ax中的值。字在内存中存储时,要用两个地址连续的内存单元来存放,字的低字节存放在低地址单元,高位字节存放在高地址单元。通过上图可以看出入栈push时,栈顶指针SP寄存器是在减少的,每次减少了一个字,即两个字节。出栈的过程SP的过程正好相反,是在增加的。

从上面的例子还可以看出,同一段内存空间,即可以用来当作数据段,也可以用来当作栈来使用。

目录
相关文章
|
SQL JSON 数据库连接
Dataphin常见问题之报415错误如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
11月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
1086 0
|
网络协议 网络虚拟化
【HCIE】07.MPLS VPN单域(一)
【HCIE】07.MPLS VPN单域
222 0
|
安全 前端开发 Java
java.lang.NullPointerException出现的几种原因及解决方案
java.lang.NullPointerException出现的几种原因及解决方案
10049 1
|
Java 容器
第二季:4我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。【Java面试题】
第二季:4我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。【Java面试题】
125 0
|
人工智能 达摩院 算法
阿里AI上岗双11服装车间,能识别头发丝直径十分之一的瑕疵
达摩院算法专家楚之表示,“AI已经成为传统行业降本增效的重要方法,过去几年,阿里针对不同场景研发了适用于各行各业的AI算法,目前已经广泛应用工业、交通、医疗、教育等领域。”
10091 4
阿里AI上岗双11服装车间,能识别头发丝直径十分之一的瑕疵
|
算法
漫画算法题:两数之和与三数之和
我们来举个例子,给定下面这样一个整型数组(假定数组不存在重复元素):我们随意选择一个特定值,比如13,要求找出两数之和等于13的全部组合。 由于12+1 = 13,6+7 = 13,所以最终的输出结果(输出的是下标)如下:
273 0
漫画算法题:两数之和与三数之和
|
前端开发 JavaScript 数据安全/隐私保护
Element el-input 输入框详解
本文目录 1. 用途 2. 输入框 2.1 输入框基本功能 2.2 显示占位文本 2.3 禁用 2.4 可清空的输入框 2.5 显示密码框 2.6 显示图标 2.7 输入长度限制 3. 文本域
3135 0
Element el-input 输入框详解
|
消息中间件 前端开发 Dubbo
详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)(一)
详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
959 0