首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解lbu指令有困难

理解lbu指令有困难
EN

Stack Overflow用户
提问于 2021-09-08 21:03:23
回答 2查看 281关注 0票数 0

我在火星学习MIPS,我一直在尝试理解lbu的教学,我需要一些帮助来解开概念。在“帮助”一节中,lbu被定义为:

“$t1,-100($t2)”

“加载字节无符号:从有效内存字节地址将$t1设置为零扩展8位值”

  1. "-100($t2)“做什么?
  2. 零扩展8位值到底意味着什么?
  3. 是否正确地理解lbu指令从寄存器复制第一个(最右边)8位并将其插入另一个寄存器?如果是的话,”有效内存字节地址“reffer是否指向原始寄存器(复制的来源)?

我找不到任何好的解释。也许我的问题有点复杂,但希望你能得到要点。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 22:20:37

在"lbu $t1,-100($t2)“中,$t1$t2是32个MIPS寄存器中任意一个的占位符,-100是16位符号扩展立即的占位符。

指令从由于添加第二寄存器的内容(示例中为$t2)和16位立即签名的内容而产生的有效存储器地址读取字节,然后目标寄存器的内容(示例中的$t1)用从内存读取的字节(在8个最小有效位中)加载,并在24个最重要位中填充0。

因此,例如,您可能在MARS中有以下示例代码:

代码语言:javascript
运行
复制
 .data
info: .byte 0x10 
      .byte 0x20
last: .byte 0x30

 .text    
li $a0, 0xFFFFFFFF
la $t0, info
lbu $a0, 0($t0)
la $t1, last
lbu $a1, -1($t1)
li $v0, 10
syscall  # terminate

在执行lbu $a0, 0($t0)之前,$a0将保存0xFFFFFFFF$t0将保存数据部分开始的地址。

在执行该指令之后,$a0将保存0x10,即数据部分的第一个字节的内容。

在执行lbu $a1, -1($t1)之前,$t1将保存数据部分包含最后(第三个)字节的地址(示例中内容为0x30的地址)。还请注意,我正在使用-1作为本指令中的直接内容。

在执行该指令之后,$a1将保存0x20,即数据部分第二个字节的内容。

票数 2
EN

Stack Overflow用户

发布于 2021-09-08 21:18:57

我在这里找到了一个MIPS程序集引用:

https://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf

它说($t2)是寄存器$t2中保存的地址(寄存器集$8$15),-100的意思是减去100并使用它作为实际地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69109647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档