02 寄存器和描述符

描述符

GDT;全局描述符表:主要存放操作系统和个任务公用的描述符

非常重要:在计算机转换成保护模式之后,gdt就用来表示内存中的位置
	公用的数据和代码段描述符,各任务的TSS描述符和LDT描述符		tss是任务状态段,存放各个任务私有运行状态信息描述符

在这里插入图片描述

GDTR :  ,48位

LDT;局部描述符表,主要存放各个任务的私有描述符

段寄存器:高13位表示索引号,低2位表示特权级别

在这里插入图片描述

寄存器

32位寄存器

-数据寄存器 用于存储程序运行中间数据,ecx常用于计数
	EAX
	EBX
	ECX
	EDX

-变址寄存器 :主要用于存放存储单元段内偏移量;用于寻址
	ESI:源地址
	EDI:目的地址

- 指针寄存器:用于栈
	EBP:栈底
	ESP:栈顶

注:在其他地方,变址寄存器和指针寄存器同时也被称为地址寄存器

- 段寄存器:selector  可知系统的段模式是由cpu决定的,段寄存器根据gdt来查找具体位置
	 CS:代码段寄存器
	 DS:数据段寄存器
	 ES:附加数据段寄存器
	 SS:栈段寄存器
	 FS:主要用来指向Thread Information Block(TIB)  还可以当作附加段寄存器
	 GS:全局段寄存器  还可以当作附加段寄存器
	 	段寄存器可以访问这篇bolghttps://blog.csdn.net/pilifeng1/article/details/81842347

- 指令寄存器
	EIP:存放下次要执行的指令地址

- 标志寄存器
	PSW:程序的运行状态

32位寄存器使用惯例

  1. %esp 存储栈顶指针

  2. %eax 存储函数返回值

  3. %ebx 父过程使用的通用寄存器 所以开始要 pus %ebx

    寄存器使用惯例 
        1. 调用者保存 :父函数保存寄存器数值
           1. %eax  %edx  %ecx
        2. 被调用者保存 : 子函数保存寄存器数值  
              1. %ebx  %esi  %edi
    

例如递归调用 %eax直接使用 %ebx使用前保存旧值;退出前恢复

在这里插入图片描述

64位寄存器使用惯例

%rsp是专门用于指向栈  %rbp被解放
寄存器使用惯例 
            1. 调用者保存 :父函数保存寄存器数值
               1. %rax  %rdx , %rcx, %rsi ,%rdi %r8,%r9,%11
            2. 被调用者保存 : 子函数保存寄存器数值  
                1. %rbx  %rbp  %r10 %r12,%r13,%r14,%r15



64位下 %rsp往下128字节可以直接使用,不用移动%rsp

Trick

volatile 强制存储在栈空间:记得在c语言编程时有一个声明reg也就是寄存器变量,可以加快对数据的访问,但是当多线程修改同一个变量的时候,就会造成互斥

RISC:MIPS1,mips3

只有load/store指令来访问内存,其他都来操作寄存器为中心32个寄存器

ARM:类似于risc,使用16位操作码,而且具有条件执行

只有load/store指令来访问内存,其他都来操作寄存器为中心32个寄存器

ARM:类似于risc,使用16位操作码,而且具有条件执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值