段寄存器

8086的内存分段机制

北慕城南 提交于 2019-12-27 01:23:08
文章目录 1 代码段和数据段 2 8086的分段机制 2.1 8086的分段机制 1 代码段和数据段 对于我们的程序来说,通常分为代码段和数据段: 对于上面的代码使用的是绝对地址,当我们的操作系统把数据段不是加载在0x0100的地址时,就会出现访问数据的错误。这其实就是重定位的问题,需要借用段寄存器解决: 我们需要知道如下几点: 指令中的地址是数据在段内的偏移地址。 数据段寄存器DS中的值是数据段的段地址。 段地址+偏移地址=物理地址,也就是数据实际所在的地址。 重定位就是通过改变数据寄存器DS中的值来实现的。 2 8086的分段机制 2.1 8086的分段机制 8086的处理器地址引线:20根,那么逻辑地址就是20位。而我们的寄存器只有16位,为了解决这个问题:段地址实际上也是20位,将段寄存器中的值左移4位(每个分段必须加载到地址最低位为0的位置,相对于16进制表示而言)。偏移地址仍然是16位,也就意味着每个段的最大长度为65536个字节。 参考资料: 深度学习:C/C++、计算机体系 来源: CSDN 作者: SlowIsFastLemon 链接: https://blog.csdn.net/SlowIsFastLemon/article/details/103709407

汇编语言复习提纲

99封情书 提交于 2019-12-05 00:07:09
第一章:掌握各进制的转换,有符号数的补码表示 1.1 各进制的转换 10进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16进制 1 2 3 4 5 6 7 8 9 A B C D E F 2进制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十进制数一般用D、二进制数用B、八进制数用O、十六进制数用H来表示。 例如:10101100B,115D ,0075H等。 例: (1)N=45D 十进制数转换为二进制数(用除以2取余) 45/2 = 22 (a0= 1) 22/2 = 11 (a1= 0) 11/2 = 5 (a2= 1) 5/2 = 2 (a3= 1) 2/2 = 1 (a4= 0) 1/2 = 0 (a5= 1) 所以:N=45D=101101B (2)N=117D 十进制转换为十六进制数(除以16取余法) 117/16 = 7 (a0= 5) 7/16 = 0 (a1= 7) 所以 :N=117D=75H (3)将二进制数1011100转换为十进制数(各位二进制数码乘以与其对应的权之和) 1011100B = 1×2^6 + 0×2^5 + 1×2^4 + 1×2^3 + 1×2^2 + 0×2^1 + 0×2^0 = 92D (4

汇编基础知识

帅比萌擦擦* 提交于 2019-12-04 11:26:14
1: 数据的表示 微型计算机的字长与微处理器的寄存器位数有关。 以 Intel 80X86 系列微处理器为例,CPU 是 8086/8088、80286 的字长是 16 位(二进制位 bit),那么它们的寄存器的位数一定是 16 位的; 32 位字长的微机 CPU 是 80386/80486 或者 Pentium 系列,它们的寄存器的位数则是 32 位的。 学习汇编语言我们会用到十六进制(H)的数据形式,要使自己尽快习惯用十六进制来思维。在汇编语言中,数值后面分别用字母 B 、 H 、 D 代表二进制(Binary)、十六进制(Hexadecimal)、十进制数(Decimal)(十进制数可以省略 D )。 在计算机中还规定采用字节、字、双字等单位来表示数据。 字节(Byte):8 位二进制数。如 00000101B 或表示成 05H ; 10000101B 或表示成 85H 。 字(Word):16 位二进制数,等于 2 字节。如 1100010111010110B 或表示成 C5D6H 。 双字(Double Word):32 位二进制数,又称为双精度数,等于 4 字节。如 23456789H 。 2: 寄存器的分类 8086 寄存器都是 16 位的寄存器,根据用途可分为 4 种类型。分别是数据寄存器、地址寄存器、段寄存器和控制寄存器 (1)数据寄存器

汇编学习1--寄存器学习

匿名 (未验证) 提交于 2019-12-02 23:42:01
最近发现底层原理知识匮乏,故而重故一下汇编, 以便对系统攻防技术有更好的理解 下图是80X86寄存器整体图示: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 作用:寄存器是 中央处理器 内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存 指令 、 数据 和 地址 。在 中央处理器 的控制部件中,包含的寄存器有 指令寄存器 (IR)和 程序计数器 (PC)。在 中央处理器 的算术及逻辑部件中,寄存器有 累加器 (ACC) (来自百科) 下面对各类寄存器进行介绍: 1. 数据寄存器 作用:数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间 寄存器中数据存储: 在内存中时,由于内存单元是字节单元,刚一个字要用2个地址连续的内存单元来存放,字的低位字节存在低地址单元. 0地址单元中存放的字节型数据为20H,0地址单元中存放的字型数据为4E20H,2地址单元中存放的字节型数据为12H,2地址单元中存放的字型数据为0012H 汇编命令: 2.段寄存器 作用 : 段寄存器 是因为对内存的分段管理而设置的。计算机需要对内存分段,以分配给不同的程序使用

四、保护模式之内存分段管理机制

江枫思渺然 提交于 2019-12-02 18:51:07
以我的理解,内存的分段管理机制,就是人为的把内存分成几个小段(Segment),各段独立使用。 为什么要把内存分成很多小段使用呢?原因一是要多个程序同时运行:开QQ勾搭妹子,开网易云音乐听歌,开浏览器看网页。。。。。。好几个程序一起开着呢!如果几个程序都用同一块内存,那就乱了!所以,把内存分成几段:QQ用一段,别的程序不能访问; 网易云音乐用另一段,其他程序也不能访问。。。。。。原因二是不同程序的权力不一样:操作系统可以启动、关闭应用程序,应用程序可不能对操作系统指手画脚,也就是各段内存的被访问权限是不同的。 很明显,要准确定义一个段要三个参数:该段从物理内存的哪个位置开始(段开始的实际内存地址)、该段占用多大的内存空间(段的长度)、该段能被哪些程序访问(段的属性),用专业术语说就是段基址(Segment Base)、段界限(Segment Limit)、段属性(Segment Attritbute)。 用一个数据结构来描述段的三个属性,这个数据结构就叫 段 描述符(Descriptor)。由于历史的原因( 为了和80286兼容 ),这个数据结构看起来相当纠结: 三个参数竟然不各自独立连续存放,而是被拆开混存的! ; 段描述符图示 ; ; ------ ┏━━┳ ━ ━ ━┓内存高地址 ; ┃ 7 ┃ 段 ┃ ; ┣━━┫ 基 ┃ ; ┆ ┆ 址 ┆ ; 字节 ┆ ┆ 高 ┆ ;

操作系统——寄存器

拜拜、爱过 提交于 2019-12-01 09:10:01
寄存器 分为 通用寄存器:32位,用于数学和逻辑运算 段寄存器: 状态和指令寄存器:记录和改变80386处理器状态 通用寄存器 8个32位寄存器:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI 同时这8个寄存器的低位字可用作16位寄存器:AX,BX,CX,DX,BP,SP,SI,DI 段寄存器 6个16位寄存器:CS, DS, SS, ES, FS和GS,分别标识6个段 来源: https://www.cnblogs.com/Ivan-Luo/p/11675018.html

汇编语言中 cs, ds,ss 的区别

孤街浪徒 提交于 2019-11-27 15:36:13
CS(Code Segment):代码 段寄存器 ; DS(Data Segment):数据 段寄存器 ; SS(Stack Segment): 堆栈 段寄存器 ; ES(Extra Segment):附加段寄存器。 当一个程序要执行时,就要决定程序代码、数据和 堆栈 各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。 1.代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供。   2, 数据段寄存器DS:指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值。   3, 堆栈 段寄存器SS:指出当前堆栈的底部地址,即存放堆栈段的段基值。 CS、DS就是所谓的段寄存器。一个程序往往分为好几个段。CS中保存了代码段的基地址,DS保存的是数据段的基地址,而IP中保存的是所要执行的下一条指令的地址 https://zhidao.baidu.com/question/347752668.html 来源: https://www.cnblogs.com/xiangtingshen/p/11368623.html

Intel 80386 CPU

偶尔善良 提交于 2019-11-26 19:20:50
一、80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中。这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。80386的广泛应用,将PC机从 16位 时代带入了 32位 时代。80386的强大运算能力也使PC机的应用领域得到巨大扩展,商业办公、科学计算、工程设计、多媒体处理等应用得到迅速发展。它的数据总线和地址总线都是32位,直接寻址的内存空间4GB,虚拟地址空间为64TB。芯片上集成了27.5万个晶体管,主频16-33MHz。它是X86第一个真正的32位CPU,它能提供真正的多任务处理和建立虚拟系统的能力。 二、80386的引脚及功能 80386 DX有132根引脚,采用PGA(Pin Grid Array,引脚网格阵列)封装,采用这种封装工艺单根引脚所占用的面积较双列直插时小,因此引脚数目可以多一些,不必再采用引脚复用技术。因此,在80386中数据线和地址线是分开设置的,控制信号和状态信号也不再复用引脚。其中34 条地址线(A31~A2、BE3~BE0),32 条数据线(D31~D0),3 条中断线,1条时钟线,13 条控制线,20 条电源线VCC,21条地线VSS,还有8 条为空。 与8086/8088 相比,需要说明以下几点: 1)时钟( CLK2): 80386