技术论坛

 回复:请高手给看一下此指针的意思

返回主题列表
作者 主题
大-雨
游侠

经验值:433
发帖数:73
精华帖:0
楼主    2013-04-22 23:31:16
主题:请高手给看一下此指针的意思
OPN DB 6
L P#DBX 0.0
LAR1
L #IN0
SLD 5
+AR1
L DBD [AR1,P#0.0]
T #OUT1
没看太明白谢谢
老学童
奇侠

经验值:8218
发帖数:765
精华帖:32
15楼    2013-09-14 18:00:05
精华帖  主题:回复:请高手给看一下此指针的意思
quote:以下是引用Henry-wang在2013-09-14 09:34:20的发言:
谢谢楼上的解析,到了下面这条指令时,区域指针怎么跟指针常数相加呢?
OPN DB 6
L P#DBX 0.0
LAR1
L #IN0
SLD 5
+AR1

还有下面这条指令不是给标明了区域了吗,就不用上面在重复标明了吧!
L DBD [AR1,P#0.0]
T #OUT1
L DBD [AR1,P#0.0]
多谢高手指导!


Automann等几位大侠一语道破了这一段程序的真实作用, 看到你执着的学习精神,我就把这段程序给你解释一下!

这段程序的真实作用是将DB块中的第N个数(DB6.DBD'N')输出, 因此,‘IN0’的数据类型一定是INT,例如:整数10,

OPN DB 6 //打开DB6
L P#DBX0.0 //取DB6数据区的数据首地址
LAR1 //将DB6数据区的数据首地址装入地址寄存器1
L #IN0 //将输入的数装入累加器1(32位),例如:10 (16位)
SLD 5 //将累加器1(32位)中的32位全部左移5位得到DB中要读取数的32位地址指针,即‘字节地址.位地址’,40.0 (每个DW数占4个字节,当然第10个数的地址尺寸就是40.0了),也是相对于DB6数据区的数据首地的偏置尺寸)
+AR1 //将偏置加入地址寄存器1得到了要输出数据的32位区域地址指针‘DBX40.0’ (P#DBX0.0+P#40.0)
L DBD [AR1,P#0.0] //读取数据,注意这里P#0.0是指针偏置,因为AR1中已经有了准确地址,因此,无需偏置
T #OUT1 //输出到某个DW型地址,例如:MD0

‘P#0.0’中没有包含数据区识别符,无法正确寻址;

楼主的程序中有一段错误,AR1中已经包含了数据区识别符,因此,‘ L DBD [AR1,P#0.0] ’要改成‘ L D [AR1,P#0.0] ’,否则,也可以用'P#0.0'

OPN DB 6
L #IN0
SLD 5
LAR1
L DBD [AR1,P#0.0]
T #OUT1

希望我的解释能帮助你脱离困惑,建议你看帖子一定要看高手们的回帖,从中汲取营养,祝你睡个好觉!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。