来自读者的问题

有读者在看我之前的关于16位系统上的调用约定的文章时,有这么一个问题:为什么在早期x86处理器上可用的寄存器为什么那么少?

8086是一款16位的微处理器,比它更早的是8080。它有6个8位寄存器,分别命名为:A, B, C, D, E, H和L。通过两两组合,我们可以用它们产生16位的虚拟寄存器,例如:BC, DE和HL。
另外,你甚至可以将一个16位的地址放入HL寄存器,并用另外一个虚拟寄存器”M”来解引用它。
所以,举个例子,你可以这样写”MOV B, M”,表示:将HL寄存器指向的8位数值加载到B寄存器中。

8086处理器沿用了8080处理器的寄存器设计,并使用了如下的方式对它们进行了映射:
> A => AL
> H => BH, L => BL; HL => BX; M => [BX]
> B => CH, C => CL; BC => CX
> D => DH, E => DL; DE => DX

这就是为什么8086指令集只能通过[BX]而不是[CX]或[DX]来进行解引用操作,以实现将旧的8位代码迁移到新的16位处理器。甚至连MS-DOS操作系统调用也以这种类似的方式进行设计,已实现代码的机器级别转换。

那SI和DI寄存器呢?

我猜想,它们的引入可能来自Z-80上IX和IY寄存器的灵感。Z-80是8080处理器的竞品,它使用了8080的指令集并使用更多的寄存器对指令集进行了扩展。Z-80处理器上,可以通过[IX]和[IY]来解引用,同样的在8086上,也可以通过[SI]和[DI]来解引用。

那BP寄存器呢?

我再次猜想,它的引入是为了能实现基于栈的参数传递。请注意,BP寄存器是8086处理器上唯一一个默认的SS段寄存器,它可以用来直接对内存进行访问。

为什么不能像现代处理器动不动就上16个甚至128个寄存器那样,添加更多的寄存器呢?
为什么在8086处理器上只保留了8个寄存器(AX, BX, CX, DX, SI, DI, BP, SP)呢?
简单来说,是历史原因吧。在8086那会儿,大部分处理器都没有设计很多的寄存器。
另外一款处理器68000,设计了多达16个寄存器,但是如果你仔细看看它的设计文档,这些寄存器中,只有一半能进行通用计算,而另外一半只能用来进行内存访问。

总结

历史(处理器的寄存器个数),由胜利者(Intel)书写。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why does the x86 have so few registers?》

sp寄存器和bp寄存器_为什么早期x86处理器寄存器很少?相关推荐

  1. 捡到vivo手机怎么清除账号_为什么现在买手机,很少会去考虑OPPO和vivo呢?看一下老板怎么说...

    不知道大家是否注意到,近年来OPPO和vivo的报道越来越少,而华为.荣耀和小米出现的频率越来越高.此外,网络上还有另外一个声音,一个专业的机友朋友说,宁可选择小米.OPPO和vivo,为什么熟悉自己 ...

  2. 相片打印机原理_激光照片打印机的原理 为什么很少人用激光照片打印机打印照片...

    激光照片打印机是利用激光扫描,在硒鼓上形成电荷潜影,然后吸附墨粉,再将墨粉转印到打印纸上,只不过黑白激光打印机只有一种黑色墨粉,而彩色激光打印机要使用黄.品.青.黑四种颜色的墨粉. 该图片由注册用户& ...

  3. Intel X86 CPU寄存器学习笔记

    本文对Intel CPU寄存器做一些浅显的介绍.Intel处理器寄存器在很多教科书上有,网络也有很多文章涉及到.因此本文在这些基础上做一些归纳总结,另外也参考了Intel IA32架构软件开发手册. ...

  4. 寄存器地址和内存地址_通俗易懂和你聊聊寄存器那些事(精美图文)

    我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 下面我们就来介绍一下关于寄存器的相关内容.我们知道, ...

  5. 【转】sp,lr,pc即汇编语言中几个常见寄存器的使用

    arm汇编基础(转) 先看个例子: void test2(int a,int b,int c) { int k=a,j=b,m=c; } GCC反汇编: 00000064 <test2>: ...

  6. jk触发器改为四进制_锁存器、触发器、寄存器和缓冲器的区别

    一.锁存器 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才 ...

  7. spo2数据集_自己翻译的Max30100寄存器中文资料(血氧心率传感器IC)

    Max30100 可穿戴光电式的血氧心率传感器IC 总体描述: Max30100是一款集成的脉搏血氧和心率检测传感器.它使用了两个LED灯,一个用来优化光学的光电探测器,和低噪声模拟信号处理器,用来检 ...

  8. ARM处理器寄存器和汇编指令系统

    1.ARM的处理器模式 ARM体系结构支持7种处理器模式,分别是:用户.FIQ.IRQ.管理.中止(abort).未定义和系统模式.除了用户模式外,其余都称之为特权模式.除了用户和系统模式外,其余都称 ...

  9. X86汇编---寄存器+指令

    文章目录 X86汇编常见的寄存器 x86汇编指令集大全 X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP ...

最新文章

  1. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.17 如何选择合适的拍摄地点...
  2. 【超级大转载】常用的D3D变换相关函数
  3. 【Socket】linux广播技术
  4. SessionLocaleResolver
  5. python 文件操作 os.readline()函数用法
  6. 用DELPHI的RTTI实现对象的XML持久化 【转】
  7. 技术回顾系列:最新最热门的技术大事-第一周
  8. 基本服务-使用大使网关
  9. 【转】细说.NET中的多线程 (二 线程池)
  10. 二维小波变换_【外文文献速读】实时二维水波模拟
  11. 《机器学习训练秘籍》中文版58章节 完整开源 吴恩达
  12. Drools集成SpringBoot
  13. STM32工作笔记0018---JLINK程序下载
  14. mysql blob图片_显示存储在mysql blob中的图像
  15. juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
  16. 【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) E】Cops And Roobers【最小割】
  17. 强化学习: Q-learning实例python实现
  18. winform中notifyIcon的ShowBalloonTip方法的坑
  19. 【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
  20. 用matlab产生正弦信号并采样,正弦信号的采样与恢复..doc

热门文章

  1. Windows下VS2013 C++编译测试faster-rcnn
  2. 用两个使用Caffe的小项目案例演示迁移学习的实用性
  3. SQLServer 游标简介与使用说明[转]
  4. Linux Kernel 4.20 生命周期已结束,建议迁移 5.0
  5. Visual Studio 2017 15.5预览版添加对F# Core及Standard的支持
  6. 07_js走路小游戏
  7. JS正则表达式详解(转)
  8. WinForm 2.0 textBox作为参数的查询,显示在DataGridView
  9. 2007年50种方式将改变你生活
  10. 网页元素坐标表示及坐标计算方法