【发布时间】:2020-06-08 20:09:39
【问题描述】:
大家好,我正在尝试将下面的代码转换为机器代码,但我卡住了..“分支指令的偏移量由汇编器计算: – 通过将分支指令和目标地址之间的差减去 8(允许管道)。”在一些幻灯片中找到了这些信息。根据这些信息,我假设 1. 线路的地址是 ...4000,BNE 循环的地址在 400c 中。所以 4000-400c=-c 和 -c-8=-14 .所以我认为机器码值应该是0001 101 0 111111111111111111101100。最后一部分是偏移量,它的-14是2的cmplemen。我不确定是真的吗?但也有一些资源说偏移值应该是-5所以我不能确定。 this is the empty set
loop LDR R2,[R1],#4 ; Loading value from array and ;updating(increment) the address
ADD R3,R3,R2 ; Sum is stored in R3 register
SUB R0,R0,#1 ; Decrementing counter value
CMP R0,#00 ; Checking counter value
BNE loop
【问题讨论】:
-
如果
loop位于4000,则BNE不能位于400c。它位于4010。偏移量是字而不是字节,因此是 -6 个字。编码为1A FF FF FA。您可以自己使用汇编程序进行检查。 -
对不起,我是新手。我不明白它是-6。
-
4 条指令跳转回来(
CMP+SUB+ADD+LDR),加上 2 条用于管道(8 个字节为 2 个字/指令)。或者,如果您想使用地址进行计数,那么0x4000 - 0x4010 - 8 = -24 bytes = -6 words -
哦,知道了。谢谢