我获得了几行代码并被告知要写相应的LC3指令。我无法确定偏移值。
例如:
x3100 1110001000100000
所以1110是LEA的操作码。 001表示R1。其余的让我困惑。我留下了000100000.查看LC-3指令列表,LEA的语法如下
LEA--> |1110|DR|PCoffset9|
如何从我的代码中找出PCoffset9是什么? 000100000是32号,所以它是:
LEA R1, #32 ;is this right?
这似乎不对。我以为我记得看到这些数字表示为内存位置?那么000100000会是x020吗?我对如何弄清偏移感到困惑。
答案 0 :(得分:1)
你对这条指令的细分是正确的。 保留的偏移 000100000 确实是十进制的32或十六进制的x0020。
此偏移量必须取自当前指令的末尾。由于当前指令位于x3100,因此它的结尾位于x3101。现在,您将32添加到此数字,并获得此LEA
所指的内存地址。 x3101 + 32 == x3121
很可能在正常程序中,会在此地址x3121处定义标签。因此,编码 1110001000100000 的指令可能源自如下源代码行:
LEA R1, MYLABEL