百科问答小站 logo
百科问答小站 font logo



8086/8088寄存器BX,书上写是基址寄存器,这个基址指的是什么,程序里用BX一般都是放偏移地址? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

BX叫Base Register应该算是一个历史问题了。

早年8086汇编设计的时候,四个通用寄存器是有不同的意义的:
AX叫Accumulator Register,翻译成累加寄存器
CX叫Count Register,翻译成计数寄存器
DX叫Data Register,翻译成数据寄存器
BX叫Base Register,翻译成基址寄存器
注意:正确的排序是AX CX DX BX,BX寄存器是排到最后的。

为什么是叫这些名字:

AX是通用的做计算的计数器。另外,跟别的寄存器不一样的地方是:凡是操作AL/AX/EAX寄存器的指令,比别的指令都短(或者有单独一条指令),所以速度更快,我个人的猜测是,早年的时候,能用来做计算的寄存器,可能只有AX这一个。

CX是用来计数的,指令手册上都会讲,这个寄存器一般用来跟循环指令、移位指令配合使用,早年的时候,能做循环计数的寄存器只有这一个。

DX最初是用来保存计算结果的,比如乘法和除法的结果就在这里。

BX最初的用途是寻址的,在16位汇编模式下,能用来做ModRM寄存器间接寻址的,只有BX和BP(BP寄存器被翻译成Base Pointer寄存器),ModRM中文该翻译成什么我也不知道。

在16位模式下,能在间接寻址里做计算的,只有以下几种组合:

       [BX/BP/SI/DI + 立即数] [BX/BP + SI/DI] [BX/BP + SI/DI + 立即数] [BX/BP + SI/DI + 立即数] [BX/BP + SI/DI*N + 立即数] [BX/BP + SI/DI*N + 立即数]     

这就是Base的含义,BX可以作为基地址+偏移来取得地址然后加载。

到32位以后就没这种限制了,寄存器的使用场景也没有原来那么限制了,所以现在已经很少有人把BX叫做基址寄存器了。




  

相关话题

  为什么修改esp寄存器会触发异常? 
  单片机编程最早是汇编,然后从汇编转为c语言,那么,c++会不会替代c语言来进行单片机编程 ? 
  CPU(为方便讨论,这里仅限32位X86指令)的各种构架,比如奔3,奔4,对纯加法运算速度有帮助吗? 
  一般编程的时候,使用汇编能比使用高级语言(比如C,C++,java等)有更高的运行效率吗?高能高出多少呢? 
  CPU寄存器到底有多大?《深入理解计算机系统》说大概有几百字节,可是汇编课上却说理论上有64kb 
  32位保护模式下,段基地址应尽量选取16字节对齐的那些地址,可使访问的性能最大化? 
  8086CPU的16位数据线如何传送大于16位的数据? 
  既然每个程序占用的内存都是操作系统管理的,为什么内存泄漏还是个问题? 
  为什么Interrupt需要存储PSW(程序状态字)但子程序调用不需要? 
  最短的可以造成崩溃且编译器无法优化掉的 C++ 代码是什么? 

前一个讨论
为什么市面上没有24GB(内存条为8GB+16GB)、12GB、6GB等内存的电脑?
下一个讨论
RISC-V RV32I中零寄存器有什么用?





© 2025-01-29 - tinynew.org. All Rights Reserved.
© 2025-01-29 - tinynew.org. 保留所有权利