关于存储器按字节寻址和按字寻址的理解

关于存储器按字节寻址和按字寻址的理解

近日在学习MOOC上学习哈工大刘宏伟老师的“计算机系统组成原理”课程,在4.1节提到主存的时候简单地提到一下关于按字节寻址和按字寻址的寻址空间问题,个人非常疑惑于是各处搜索查找资料,下面是本人就这个问题的理解,诸多不足请各位网友批评指正

  • 对于位、字、字长、字节的理解

  • 位(bit,简写为b):是计算机中最小的数据单位,一个位的值只可能是0或1,如四位二进制数0101。

  • 字节(Byte,简写为B):8个二进制位构成1个字节,它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,如11111111表示的则是一个字节,如果换成十进制则一个字节表示的数字范围为0-255,如关于二进制和十进制转换不清楚的可以自行百度,这里不做详细说明。

  • 字长:计算机中对CPU在单位时间内(同一时间)能处理的最大二进制数的位数叫做字长。根据机器的性能不同那么不同的机器有不同的字长。如一台8位的CPU,这里的8位指的即是它的字长为8位,换句话说也就是单位时间最多处理一个长度为8位的二进制数也就是一个字节。

  • 字(Word,简写为W):字是不同计算机系统中占据一个单独的地址(内存单元的编号)并作为一个单元(由一个或多个字节组合而成)处理的一组二进制数。8位的CPU字长为8位,一个字等于一个字节,一次只能处理一个字节,而32位的CPU字长为32位,一个字等于4个字节,一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节,一个字等于8个字节。
    看上去好像不好理解,那么这是什么意思呢?根据我个人的理解,假设有两个人A和B,他们都爱吃包子,他们约定一个时间(单位时间)一起买包子,A(8位的CPU)一顿能吃8个包子(8位即一个字节),于是他买了8个包子(一个字节)装进一个袋子(字)里;而B(32位的CPU)一顿能吃32个包子(32位即四个字节),于是他买了32个包子(四个字节)装进一个袋子里(字)。相信大家看出来了吧,同样是一袋包子,因为A和B食量不同里面装的包子数量不同,这也就是为什么同样是一个字在不同机器上的包含字节不同!

  • 地址线和数据线
    地址线:用于传输地址信息,就像网线一样,内部的线缆有很多但是都封装起来了所以我们看不到,一根地址线可以通过高电平(1)或低电平(0)的电流,根据电流的不同来传输地址数据,这样就很清楚了,每1根地址线有2个状态,那么N根地址线就可以表示 2N

<think>嗯,用户问的是寄存器间接寻址存储器间接寻址的区别。我得先回忆一下计算机组成原理里的寻址方式。寄存器间接寻址,应该是操作数的地址存在寄存器里,而存储器间接寻址则是地址存在内存单元中。需要确认这两个概念的正确性。 首先,寄存器间接寻址的例子,比如MOV AX, [BX]。这里BX寄存器里存的是有效地址,CPU会去那个地址取数据。而存储器间接寻址可能像MOV AX, [[0x1234]],这里0x1234是一个内存地址,里面存的是实际的操作数地址,需要两次内存访问。 需要解释两者的主要区别在于地址存储位置:寄存器还是内存。访问次数的话,寄存器间接只需要一次内存访问,而存储器间接需要两次,所以速度上寄存器更快。应用场景方面,寄存器间接可能在函数参数传递中用得多,而存储器间接可能用于指针数组或者更复杂的结构。 还要注意用户可能的背景,可能是学生或者刚学习计算机的人,需要例子来帮助理解。结构要清晰,分点说明区别,可能用步骤式或对比表格。确保用中文,避免术语混淆。检查是否有其他可能的混淆点,比如操作数的位置,或者是否有其他变种的寻址方式,但题目明确问的是这两种,所以专注在它们的对比上。 最后确保回答符合系统指令,数学表达式正确,结构合理,用中文。可能需要用例子中的汇编代码,但要用LaTeX的行内格式,比如$[BX]$。还要确认是否要避免使用Markdown,用户可见层需要结构清晰,分步骤或分点,所以用序号或项目符号可能更好。</think>寄存器间接寻址存储器间接寻址的区别可通过以下分步对比理解: 1. **定义差异** - **寄存器间接寻址**:操作数的有效地址存储在**寄存器**中。 - 示例:`MOV AX, [BX]`(假设`BX`寄存器中存储地址$0x1000$,则实际访问内存地址$0x1000$的内容) - **存储器间接寻址**:操作数的有效地址存储在**内存单元**中。 - 示例:`MOV AX, [[0x2000]]`(假设地址$0x2000$处存储值$0x3000$,则实际访问内存地址$0x3000$的内容) 2. **硬件访问次数** - 寄存器间接:需1次寄存器读 + 1次内存访问 - 存储器间接:需1次内存读(取地址) + 1次内存访问(取数据) 3. **速度对比** - 寄存器间接更快,因寄存器访问速度$t_{reg} \ll t_{mem}$(寄存器访问时间远小于内存) 4. **典型应用场景** - 寄存器间接:函数参数传递(如x86架构通过`EBX`传递指针) - 存储器间接:指针数组操作(如`int *arr[]`中通过数组元素访问目标数据) 5. **地址解析过程** - 寄存器间接路径:寄存器 → 物理地址 → 数据 - 存储器间接路径:内存地址1 → 内存地址2 → 数据 6. **编码效率** - 寄存器间接指令更短(寄存器编码仅需3bit,如x86的`BX`编码为`011`) - 存储器间接需完整内存地址编码(通常占用更多指令字节) 附示意图: $$ \begin{aligned} &\text{寄存器间接:} & \text{存储器间接:} \\ &\boxed{寄存器} \xrightarrow{\text{地址}} \boxed{内存} & \boxed{内存单元1} \xrightarrow{\text{地址}} \boxed{内存单元2} \end{aligned} $$
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值