您的位置:首页 > 其它

PC自增与转移地址计算问题总结

2016-12-05 16:55 232 查看

PC自增与转移地址计算问题总结

@(组成原理)

在之前的文章中强调过PC的自增问题,以及提到了一点点PC转移时的计算问题。

但是没有对PC自增以后与偏移值相加时会碰到的补码运算问题。此处做一个补充。

http://blog.csdn.net/u011240016/article/details/52723779?locationNum=2&fps=1

http://blog.csdn.net/u011240016/article/details/52727962

值得强调的是,即使不明确指出PC自增,也需要明白,取指令时,每读取一个字节PC就要+1,然后再在此基础上与偏移值做运算。

假设PC当前值为240,指令长度为3个字节。当下一个指令地址是290时,偏移值为多少(偏移值占用一个字节)。

设偏移值为x,则240+3+x=290

这样可以直接计算得到x=47,如果要求化为补码,则直接化为补码即可。

如果用的是另外一种计算思路,即把各个元素均化为二进制考虑。

243=F3H,290=122H

x=122H−F3H

根据补码计算,减去一个数就将加上这个数连同符号位取反加1。注意上面列式中都是用无符号数表示的。F3H取反加1为:0DH

则:122H+0DH=122F,只取最低的一个字节,即为2F.

实际上122H大于F3H,直接减也可。

如果转移地址是200,则偏移值是多少?

240+3+x=200

可以直接计算出x = -43

这是最快的方式。也可以全部换成二进制或者16进制计算,按照补码方式加减。

即:200=C8H,243=F3H

x=C8H−F3H=D5

这是给定的十进制的较小的数,举个十六进制的地址偏移计算。

当前PC值是08048114H,指令长度是4B,求偏移量OFFSET = -6,推导PC转移公式。

分析:一般给定的指令结构中后面的字段是偏移值,一般情况下是直接加上偏移值。但是实际上PC的转移可以是偏移量的整数倍。这里就是一个例子。

指令长度是4B,一定要看到PC自增4后再加上偏移量的倍数。

因此公式是:PC=PC+4+x⋅OFFSET=PC+4−6x

现在看x是什么即可。

当前PC=08048114H,转移到08048100H

即:08048114H+4H−6x=08048100H

→08048118H−6x=08048100H

相差18H = 24

所以6x = 24,即x=4

因此转移方程是:

PC=PC+4+OFFSET⋅4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PC 转移方程