• LockedX
    2022-09-09 来自湖北
    jal指令只能跳转基于pc寄存器的地址,即pc+x 而jalr可以跳转到自定义寄存器的地址,更加灵活

    作者回复: 嘿嘿 是的

    
    1
  • 苏流郁宓
    2022-09-05 来自湖北
    jalr多了一个源寄存器,既可以与jal交换使用组成类似偏移地址加基地址进行分页跳转(模仿x86,可4kb一个分页),还有一个重要功能就是,jalr的立即数可变为jal的操作码加目标寄存器(实现jalr-jal),jal的立即数可变为jalr的操作码加目标寄存器加功能加源寄存器! 这样设计的好处方便cpu自动化,提升效率(流水线不停转,交替使用减少去内存取指令浪费的时间,方便一次性执行完一个细分项目,如线程)

    作者回复: 对啊 你思考的很深入

    
    1
  • 贺宾
    2022-11-27 来自湖北
    为什么在我的main.c文件中能设置断点,而在jal.S 中却不能设置断点,需要在vscode中安装什么插件吗?

    作者回复: 需要符号 jal.S 中 你设置在标号处就行了

    
    
  • 南城忆潇湘
    2022-09-16 来自湖北
    老师,请教下, “我们一旦单步调试,程序代码就会跳到 jal a0,imm_l2 指令处,pc + 12 等于 0x10180,a0 等于 0x10178,” 这一句中的12是怎么计算的,跟前面说的符号扩展怎么对应的,这一点没搞明白, ( “pc = pc + 符号扩展(imm << 1)”) 这里的imm是什么,左移了一位,是imm左移一位变成了12吗,我是硬看的汇编代码中间隔了3条指令要偏移12

    作者回复: 链接器根据 指令大小 计算的

    
    
  • TableBear
    2022-09-05 来自湖北
    课后思考题: jal的立即数只有20位,加上2字节对齐。只能寻址当前指令前后大约1MB的地址空间。 故而有jalr指令存在的必要。(不知道对不对😂)

    作者回复: 对的

    
    