大家好,我是一个新手,最近在看一段程序时,对于其中左移三位这个指令不是很明白,问别人说是西门子存储物理地址就是这样。请教高手们,麻烦给我解释清楚为什么商的值要左移三位,而余数的值不用。程序如下。
//地址偏移量要大于零
L #OffsetAdress
L 0
<=I
R #Error //取消报警
//地址偏移量减一
L #OffsetAdress
L 1
-I
T #OffsetAdress
//取得地址的整数部分
L #OffsetAdress
L 8
/I
T #PullCord_R_Quotient
L #PullCord_R_Quotient
SLD 3
T #PullCord_R_Quotient
//取得地址的小数部分
L #OffsetAdress
L 8
MOD
T #PullCord_R_Residue
//求和获得实际地址
L #PullCord_R_Quotient
L #PullCord_R_Residue
+I
T #RealAdress
JU END
//地址偏移量报警
END: NOP 0
另外这个左移三位是物理地址与逻辑地址的变换吗????
回复内容:
对:彩虹 关于移动三位即移动了一个字节,因一个字节占8位,如现在地址是MB5如向左移就到了MB6地址,向右就寻址到了MB4地址。 内容的回复:
还有如果现在把30.0上加2,须先把2左移三位成为2.0才能加,要是直接加就成30.2了。是这样吗???
内容的回复:32位指针的结构(内部区域):31 ..............19 18..................3 2 1 0 ; 0 1 2是位地址, 3......18 是字节地址(无符号的整数), 19.........31 未定义。你说的是基本正确的,所以指针的寻址要偏移3位。