sp寄存器和bp寄存器_为什么早期x86处理器寄存器很少?
来自读者的问题
有读者在看我之前的关于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处理器寄存器很少?相关推荐
- 捡到vivo手机怎么清除账号_为什么现在买手机,很少会去考虑OPPO和vivo呢?看一下老板怎么说...
不知道大家是否注意到,近年来OPPO和vivo的报道越来越少,而华为.荣耀和小米出现的频率越来越高.此外,网络上还有另外一个声音,一个专业的机友朋友说,宁可选择小米.OPPO和vivo,为什么熟悉自己 ...
- 相片打印机原理_激光照片打印机的原理 为什么很少人用激光照片打印机打印照片...
激光照片打印机是利用激光扫描,在硒鼓上形成电荷潜影,然后吸附墨粉,再将墨粉转印到打印纸上,只不过黑白激光打印机只有一种黑色墨粉,而彩色激光打印机要使用黄.品.青.黑四种颜色的墨粉. 该图片由注册用户& ...
- Intel X86 CPU寄存器学习笔记
本文对Intel CPU寄存器做一些浅显的介绍.Intel处理器寄存器在很多教科书上有,网络也有很多文章涉及到.因此本文在这些基础上做一些归纳总结,另外也参考了Intel IA32架构软件开发手册. ...
- 寄存器地址和内存地址_通俗易懂和你聊聊寄存器那些事(精美图文)
我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 下面我们就来介绍一下关于寄存器的相关内容.我们知道, ...
- 【转】sp,lr,pc即汇编语言中几个常见寄存器的使用
arm汇编基础(转) 先看个例子: void test2(int a,int b,int c) { int k=a,j=b,m=c; } GCC反汇编: 00000064 <test2>: ...
- jk触发器改为四进制_锁存器、触发器、寄存器和缓冲器的区别
一.锁存器 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才 ...
- spo2数据集_自己翻译的Max30100寄存器中文资料(血氧心率传感器IC)
Max30100 可穿戴光电式的血氧心率传感器IC 总体描述: Max30100是一款集成的脉搏血氧和心率检测传感器.它使用了两个LED灯,一个用来优化光学的光电探测器,和低噪声模拟信号处理器,用来检 ...
- ARM处理器寄存器和汇编指令系统
1.ARM的处理器模式 ARM体系结构支持7种处理器模式,分别是:用户.FIQ.IRQ.管理.中止(abort).未定义和系统模式.除了用户模式外,其余都称之为特权模式.除了用户和系统模式外,其余都称 ...
- X86汇编---寄存器+指令
文章目录 X86汇编常见的寄存器 x86汇编指令集大全 X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP ...
最新文章
- 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.17 如何选择合适的拍摄地点...
- 【超级大转载】常用的D3D变换相关函数
- 【Socket】linux广播技术
- SessionLocaleResolver
- python 文件操作 os.readline()函数用法
- 用DELPHI的RTTI实现对象的XML持久化 【转】
- 技术回顾系列:最新最热门的技术大事-第一周
- 基本服务-使用大使网关
- 【转】细说.NET中的多线程 (二 线程池)
- 二维小波变换_【外文文献速读】实时二维水波模拟
- 《机器学习训练秘籍》中文版58章节 完整开源 吴恩达
- Drools集成SpringBoot
- STM32工作笔记0018---JLINK程序下载
- mysql blob图片_显示存储在mysql blob中的图像
- juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
- 【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) E】Cops And Roobers【最小割】
- 强化学习: Q-learning实例python实现
- winform中notifyIcon的ShowBalloonTip方法的坑
- 【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
- 用matlab产生正弦信号并采样,正弦信号的采样与恢复..doc
热门文章
- Windows下VS2013 C++编译测试faster-rcnn
- 用两个使用Caffe的小项目案例演示迁移学习的实用性
- SQLServer 游标简介与使用说明[转]
- Linux Kernel 4.20 生命周期已结束,建议迁移 5.0
- Visual Studio 2017 15.5预览版添加对F# Core及Standard的支持
- 07_js走路小游戏
- JS正则表达式详解(转)
- WinForm 2.0 textBox作为参数的查询,显示在DataGridView
- 2007年50种方式将改变你生活
- 网页元素坐标表示及坐标计算方法