请考虑以下代码:
lbu $t0, 0($t1)
sw $t0, 0($t2)
假设寄存器$t1
包含地址0x1000 0000和寄存器
$t2
包含地址0x1000 0010.注意MIPS架构使用
大端解决。假设地址为0x1000的数据(十六进制)
0000是:0x11223344。寄存器指向的地址存储了什么值
$ T2?
我的问题是,lbu指令是否会加载最高有效字节0x11或最低有效字节0x44?我在维基百科上看到一个图像,说从右到左发生8位内存访问,所以我有点困惑,因为地址应指向大端机器中的MSB。
这是图片的链接 http://en.wikipedia.org/wiki/Endianness#mediaviewer/File:Endianessmap.svg
答案 0 :(得分:2)
$ t2value = 0x0000 0011
内存中的大端格式 (高) 44 33 22 11 (低)因为MIPS处理器使用Big Endian寻址(即一个字开始存储 使用其最重要的字节或其“大端”),单词0x11223344将是 存储为四个连续字节:地址0x1000 0000处的0x11,0x22,0x33和0x44, 分别为0x1000 0001,0x1000 0002和0x1000 0003。 执行lbu指令会导致加载存储在地址0x1000 0000的字节 并将其存储在寄存器$ t0的最低有效8位中。换句话说,执行后 这条指令,寄存器$ t0的内容为:0x00000011。这是一样的 执行sw指令后将存储在存储器中的32位字。