为什么早期x86处理器寄存器很少?
寄存器 为什么 处理器 x86 早期 很少
2023-09-14 09:10:45 时间
来自读者的问题
有读者在看我之前的关于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上
相关文章
- jvm的架构模型:基于栈式的架构和基于寄存器架构的特点
- devmem直接读写寄存器进行调试
- FreeRTOS 中断配置 临界段 Cortex-M 中断 中断配置宏 开关中断 临界段代码 中断屏蔽的特殊寄存器 任务级临界段代码保护 中断级临界段代码保护 BASEPRI 寄存器
- 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
- MTRR内存类型范围寄存器
- VL30-数据串转并电路(移位寄存器实现),实现一个6bit位的拼接,拼接完成后输出信号!
- 一口气看完45个寄存器 ——x86/x64架构
- SPI参数化分配寄存器
- Android培训班(78)Dalvik虚拟机的寄存器操作
- LCC编译器的源程序分析(52)寄存器溢出
- FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
- 汇编:寄存器/register,基础概念
- ARM通用寄存器和特殊寄存器