发布于 2013-11-14 16:37:08
5楼
楼主,你的问题不是“除法运算”,我相信你用脚指头也算不错!
关键的问题是你对此段程序不理解其作用,我就帮你分析一下吧!
1. 程序作用:位寻址中计算位地址
2. 方法:
1) 这里的18是总‘位’数,可能其中一位被某个专用的信号占用,因此在你的程序中要减去1位;
2) 先要计算字节地址,每个字节8位,因此,除以8后得到字节地址,即P#xxx.y中的xxx;
3) S7所有的计算都是累加器中进行的,INT型为2个字节,计算后商存在累加器的低字(低字节和低低字节),余数放在高字(高字节和高低字节),在你的程序17/2 = 00000000 00000001 00000000 00000010,前面的16位中的1是余数(00000000 00000001 ),其实就是程序要寻址的‘位’,后面是商,也即是几个字节;
4)SRD16是将整个累加器右移16位,累加器中就变成了00000000 00000000 00000000 00000001,只剩下‘位’地址,后面没有用到这里‘商’,可见你的程序中这个字节数‘2’是没有用的;
5)134是距离数据区首地址(例如:P#0.0)的偏置尺寸,即要寻址的字节在P#134.0开始的字节;
6)将134装入累加器1后,经过SLW 3(累加器1低字左移3位)就得到了32位区域指针P#134.0 (
00000000 00000000 00000100 00110000),这里不是‘1072’的含义(如果不懂,去学习间接寻址);
7) 与#BIT1(这里已经不是‘1’的概念了,而是P#0.1,如果不懂,去学习间接寻址)进行‘字或’计算后,就等于P#134.1的位地址。
年轻人,打好基础非常重要,加油啊!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。