【发布时间】:2020-01-22 22:13:07
【问题描述】:
我的教授将此作为家庭作业问题的答案之一发布。谁能帮我分解一下?我不明白他在用 CON1 - CON4 做什么以及 >> 和 0x0FFF 是什么意思。
CON1: EQU 6000
CON2: EQU 6245
CON3: EQU 10000
CON4: EQU 10245
A: DM 4 ; DM is Define Memory
addi t1, x0, A ; t1 = &A
lui t0, (CON1>>12) + ((CON1 & 0x0800)>>11)
addi t0, t0, CON1&0xFFF
sd t0, 0(t1) // Cut and paste from last question of Quiz1
// Blank line between groups of statements
lui t0, (CON2>>12) + ((CON2 & 0x0800)>>11)
addi t0, t0, CON2&0xFFF
sd t0, 8(t1)
lui t0, (CON3>>12) + ((CON3 & 0x0800)>>11)
addi t0, t0, CON3&0xFFF
sd t0, 16(t1)
lui t0, (CON4>>12) + ((CON4 & 0x0800)>>11)
addi t0, t0, CON4&0xFFF
sd t0, 24(t1)
// We need this to avoid the NO INSTRUCTION error
ebreak x0, x0, 0 ; Suspend program.
任何帮助将不胜感激,谢谢。我们正在使用 RISC-V
【问题讨论】:
-
>>是右移。您的教授将 CON 地址分成两部分(低 12 位,高 24 位),因为lui和addi的范围有限。通常这是由汇编程序自动处理的。 -
@Jester 那么 >>11 在哪里播放?
-
这是因为
addi符号扩展了立即数,因此如果设置了位0x800,则该值将被解释为负数。添加位将弥补这一点。 -
我很好奇,这是一个什么样的RISC-V汇编器?
-
@DanielIlie,你有链接吗?我用谷歌找不到。