首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

保护模式 2讲 - -寄存器结构

保护模式 - -寄存器结构 一丶保护模式学习 保护模式,主要学习的就是 与 页 的关系. 学习的时候先学习寄存器 何为 根据Intel 手册第三卷所属....出了FS寄存器.还有 ES CS SS DS GS LDTR TR等寄存器 我们上面所说的 .base 其实是寄存器的一个成员....可以理解为寄存器就是一个结构体 PS: 在inter手册中也称为寄存器描述符 2.2 寄存器结构 在我们x86平台下.我们知道一个寄存器是 4个字节. 32位. 可以表达一个32位的数据....读取 mov ax,ss 寄存器的可见部分只有16位.所以读出来之后只能放到16位寄存器中 写入 mov ss,ax 读寄存器只是读了可见部分的16位.而写入寄存器则是写入了96位 inter手册对寄存器的操作寄存器指令有以下...2.4.1 寄存器结构 在x86下.我们可以看如下寄存器表示图.

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【汇编语言】寄存器(CPU工作原理)(五)—— 寄存器以及CS和IP

    寄存器 我们前面讲到,8086CPU在访问内存时要由相关部件提供内存单元的地址和偏移地址,送入地址加法器合成物理地址。这里,需要看一下,是什么部件提供地址。地址在8086CPU的存器中存放。...当8086CPU 要访问内存时由这4个寄存器提供内存单元的地址。本章中只看一下CS。 2. CS 和 IP CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。...CS为代码寄存器,IP为指令指针寄存器。 在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存Mx16+N单元开始,读取一条指令并执行。...我们可以说,CPU将CS:IP指向的内存单元中的内容看作指令,因为,在任何时候,CPU将CS、IP中的内容当作指令的地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。...如果说,内存中的一信息曾被 CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。 结语 今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。

    12810

    【汇编语言】寄存器(内存访问)(五)—— 数据

    数据 前面讲过,对于8086PC机,我们可以根据需要将一组内存单元定义为一个(可以是代码、数据等)。...我们可以将一组长度为N(N≤64KB)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据。...比如我们用123B0H—123B9H这段空间来存放数据,我们就可以认为: 地址:123BH 长度:10个字节 那么如何访问数据中的数据呢?...将一内存当作数据,是我们在编程时一种自己的安排,我们可以在具体操作的时候 ,用 ds 存放数据地址,再根据需要,用相关指令访问数据中的具体单元。...比如,我们将123B0H—123B9H的内存单元定义为数据,我们现在要累加这个数据中的前3个单元中的数据,代码如下: 2. 问题 写几条指令,累加数据中的前3个字型数据。思考后看分析。 3.

    13410

    Linux中的

    这不仅简化了Linux 内核的设计,而且为把Linux 移植到其他平台创造了 条件,因为很多RISC 处理器并不支持机制。但是,对机制相关知识的了解是进入Linux 内核的必经之路。...linux的GDT Linux 在启动的过程中设置了寄存器的值和全局描述符表GDT 的内容,的定义在include/asm-i386/segment.h 中: #define __KERNEL_CS...另外,用户和内核的区别也仅仅在其 RPL 不同,因此内核根本无需访问描述符投影寄存器,当然也无需访问GDT,而仅从寄存器 的最低两位就可以获取RPL 的信息。...寄存器选择子 寄存器CS 、DS 、ES 、FS 、GS 、SS ,在实模式下时,中存储的是基地址,即内存的起始地址。...而在保护模式下时,由于基址已经存入了描述符中,所以寄存器中再存放基址是没有意义的,在寄 存器中存入的是一个叫作选择子的东西– selector。

    4.6K20

    浅谈FS寄存器在用户层和内核层的使用

    在R0和R3时,FS寄存器分别指向GDT中的不同:在R3下,FS寄存器的值是0x3B,在R0下,FS寄存器的值是0x30.分别用OD和Windbg在R3和R0下查看寄存器(XP3),下图:...FS寄存器的改变是从R3进入R0后和从R0退回到R3前完成的,也就是说:都是在R0下给FS赋不同值的....pop ebp 80869951 66817c24088000 cmp word ptr [esp+8],80h 二.R3下的FS 当线程运行在R3下时,FS指向的是...GDT中的0x3B.该段的长度为4K,基地址为当前线程的线程环境块(TEB),所以该段也被称为“TEB”.因为Windows中线程是不停切换的,所以该段的基地址值将随线程切换而改变的.Windows2000...GDT中的0x30.该段的长度也为4K,基地址为0xFFDFF000.该地址指向系统的处理器控制区域(KPCR).这个区域中保存这处理器相关的一些重要数据值,如GDT、IDT表的值等等.

    2.7K30

    如何读取Linux进程中的代码和数据

    Linux下的程序的文件格式是ELF,里面分了各种,有代码、数据、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。...本文整理了用cpp程序读取内存中的代码和rodata数据的方法。...这个文件的前三列分别是代码、rodata数据、和普通数据,可以看到代码的权限是读和执行,rodata数据是只读,普通数据可读写。...用程序读取内存的代码和rodata数据 以tcpdump程序为例,用程序读取代码和radata的过程如下: 1.查看tcpdump的进程ID。...2.运行自己写的程序,分别输入进程PID和代码的地址。

    3.8K20

    保护模式 3讲-寄存器GDT表与个人代码总结

    数组的每一项其实保存的都是描述符 选择子就是下标 3.1.2 GDTR寄存器与GDT表了解. 根据Inter手册所属....寄存器与LDT LDTR寄存器 保存了 16位的选择子 32位的基地址 16位的界限(长度) LDT描述符的属性....2.2 描述符属性详解. 2.2.1 寄存器描述符 一一的对应关系 寄存器中的属性 与 描述符中的属性的对应关系 寄存器我们知道其结构为 struct set { WORD...请不要把 寄存器结构 与 描述符搞混 看下图 ?...对应着描述符的 高4个字节中的 第八位 到 第23位 寄存器中的 32位的基地址 与 描述符中的基地址对应关系 描述符的基地址由三部分组成.

    2.2K21

    【汇编语言】第三章----寄存器(内存访问)(十)—— 栈以及对栈和分别进行综述

    SP原来为FFFEH,加2后SP=0,所以,当为空的时候,SS=1000H,SP=0(之前的内容讲过,由于该寄存器只能存储16位数据,因此在这里加上2之后为10000H,然后会舍去最前面的1,得到SP=...(6)用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。 (7)push、pop实质上是一种内存传送指令,注意它们的灵活应用。...的综述 我们可以将一内存定义为一个,用一个地址指示,用偏移地址访问内的单元。这完全是我们自己的安排。...可以用一个存放数据,将它定义为“数据”; 可以用一个存放代码,将它定义为“代码”; 可以用一个当作栈,将它定义为“栈”; 我们可以这样安排,但若要让CPU按照我们的安排来访问这些...一内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即: CS、IP、SS、SP、DS的指向。 结语 今天的分享到这里就结束啦!

    11810

    Linux从头学03:如何告诉 CPU,代码、数据、栈在内存中什么位置?

    几个重要的寄存器 在 x86 系统中,寻址机制以及相关的寄存器是如此的重要,以至于我忍不住在这里,把几个寄存器再小结一下。 ?...代码:用来存放代码,的基地址放在寄存器 CS 中,指令指针寄存器 IP 用来表示下一条指令在中的偏移地址; 数据:用来存放程序处理的数据,的基地址存放在寄存器 DS 中。...的基地址存放在寄存器 SS 中,栈顶单元的偏移地址存放在寄存器 IP 中。 这里的,本质上是我们把内存上的某一块连续的存储空间,专门存储某一类的数据。...这张图的意思是:在 Linux 2.6 中,用户代码的开始地址是 0,最大范围是 4 GB;用户数据的开始地址是 0,最大范围也是 4 GB;内核的数据和代码也是如此。 ?...在代码的开始部分,把数据标号 addr1 代表的地址,赋值给 DS 寄存器;把栈标号 addr2 代表的地址,赋值给 SS 寄存器。 这里的标号,是不是与 C 语言中的 goto 标号很类似?

    2.3K40

    【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码

    文章主要内容:修改CS、IP的指令以及代码的学习 1. 修改CS、IP的指令 在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。...其实,8086CPU大部分寄存器的值,都可以用mov指令来改变,mov指令被称为传送指令。 但是,mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样的功能。...✍若想仅修改IP的内容,可用形如“jmp 某一合法寄存器”的指令完成,如 “jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。 jmp ax,在含义上好似:mov IP,ax。...如何使得代码中的指令被执行呢? 将一内存当作代码,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就自动地将我们定义的代码中的指令当作指令来执行。...小结 ​ (1)地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由寄存器提供内存单元的地址。8086CPU有4个寄存器,其中CS用来存放指令的地址。 ​ ​

    7210

    Linux下开发stm32 ③ | 寄存器工程开发

    先来回顾一下前两篇 Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译 Linux下开发stm32(二) | 使用openocd下载与调试 前两篇我们介绍了如何创建一个空的裸机工程...main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~ 但是这个LED我们是通过指针直接操作寄存器地址来完成的...,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~ 1.创建寄存器工程 首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01...0x40010c00+0x0c) &= ~(1<<0); GPIOB->ODR &= ~(1<<0); while(1); } void SystemInit(void) { } 至此,寄存器工程创建完毕...,接下来开始编译~ 2.编译&下载寄存器工程 编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

    1.2K30

    尘封的中国 Linux 往事

    按照章文嵩对Julian的描述的说法,Julian写程序非常厉害,但也很神秘,两个人一直通过邮件联系,即便时间已经过去二十多年,两人至今仍然没见过面,却始终维持着一基于开源信仰的珍贵友谊。...他也不是凡人,而是Linux中文化最积极的推动者,也是水木清华BBS的 Linux斑竹(即版主),名叫方汉。...年轻的方汉很喜欢玩这个游戏,喜欢到自己上手研发,因此开始自学Linux架服务器。结果他发现Linux比MUD还好玩,兴趣自然转向了Linux。...为了专注研究Linux中文化,方汉当时还有了一个小团队,成员包括他高能物理所的两个师兄陈向阳、于明俭。 他们一起解决了很多Linux中文化的问题,在圈内一时有了“中文Linux三剑客”的名头。...魏永明带着几个研究生基于Linux重新设计了数控系统的架构,并利用业余时间为Linux系统重写MiniGUI。 在Linux上重写后的MiniGUI功能更丰富,用户体验更好。

    1.4K10

    无名寄存器

    在计算机里面也有寄存器,计算机中的寄存器是看得见,摸得着的实体,寄存器中存储需要经常访问的一些数据。...而vim中也有寄存器的概念,vim中的寄存器是一个虚拟的概念,更像是一块专门用来存储数据的内存缓冲区。在使用vim的过程中离不开寄存器,而且我们很早就用到了寄存器,只是没有发现罢了。...几种寄存器类型 无名寄存器 在之前介绍过,可以使用d来删除一内容,使用p来粘贴,使用y来复制, vim中其他的带有删除功能的operator 像 x、c、s 之类的,vim在删除之前会将被删除内容先放到无名寄存器中...但是在有好的shell工具的加持下,我更喜欢用这样的方式直接粘贴一大文字到vim中。...表达式寄存器则可以接受一vim脚本并执行它并输出结果。表达式寄存器使用 =来表示。 例如在插入模式中可以使用 =6*6 来进行数学计算并输出。

    86610

    浅谈text、data和bss

    一般情况,一个程序本质上都是由 bss、data、text三个组成——这是计算机程序设计中重要的基本概念。...bss 部分将会清零(bss属于静态内存分配,即程序一开始就将其清零了)。...比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 中,未初始化的全局变量保存在.bss 中。 text: 用于存放程序代码的区域, 编译时确定, 只读。...区别很明显,程序1位于bss,程序2位于data,两者的区别在于: 全局的未初始化变量存在于bss中,具体体现为一个占位符,全局的已初始化变量存于data中,而函数内的自动变量都在栈上分配空间。...BSS的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据后面。当这个内存区进入程序的地址空间后全部清零,包含data和bss的整个区段此时通常称为数据区。

    2.3K11

    linux有一时间后

    linux有一时间后该知道的细节 1、wrx各个权限在文件和文件夹的不同。...TED-WNAG/g或:1,$s/Ted-Wnag/TED-WNAG/gc 8、区块选择、多文件编辑、多窗口编辑、环境设定、断行字符、语系转换待补充 9、跳脱[Enter] ---- ---- ---- 用linux...有一时间后该知道的命令 1、chgrp、chown、chmod和mkdir、rmdir的递归参数 2、ls -al和ls -alS 3、cp -i和cp -l(硬连结)/cp -S(符号连结) 4、rm...『$(指令)』 『version=(uname -r)』『echo version』->『3.10.0-229.el7.x86_64』 版权所有:可定博客 © WNAG.COM.CN 本文标题:《用linux...有一时间后》 本文链接:https://wnag.com.cn/28.html 特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,

    1.6K20
    领券