| 作者 | 主题 |
|---|---|
|
大-雨 游侠 经验值:433 发帖数:73 精华帖:0 |
楼主
主题:请高手给看一下此指针的意思
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楼
主题:回复:请高手给看一下此指针的意思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 希望我的解释能帮助你脱离困惑,建议你看帖子一定要看高手们的回帖,从中汲取营养,祝你睡个好觉!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
|