中文版 | English

网站首页 | 个人作品 | 站长日志 | 给我留言 | 经典分享 | 友情链接 | 黑白人生


假设VW1~VW10中有几个很小的数(加法后不会溢出),要将这6个数相加,和送往 VW12中,求教该做法的间接寻址例程

//作者:Am programer Network 1 // 循环6次将VW0--VW10相加,结果放在VW12内 LD SM0.0 MOVW 0, VW12 //结果清零 MOVD &VB0, VD20 //将VB0的地址放到VD20 FOR VW14, 1, 6 //循环6次 +I *VD20, VW12 //将VD20指向的地址内的数据与VW12相加,结果放到VW12 +D 2, VD20 //VD20内的地址加2 (例如:第一次是VB0,VB0+2=VB2) Network 2 NEXT //作者: 芳季 <域和> ORGANIZATION_BLOCK 主程序:OB1 TITLE=程序注释 BEGIN Network 1 // 网络标题 // 网络注释 END_ORGANIZATION_BLOCK SUBROUTINE_BLOCK SBR_0:SBR0 TITLE=子程序注释 BEGIN Network 1 // 网络标题 // 网络注释 END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK 域和:SBR1 TITLE=子程序注释 // 程序目的: // 把指定连续V区域中的整数进行求和。 // 适用范围: // 不适合在中断中使用。建议在使用时通过边缘指令调用一次。 // 参数类型: // 连续数 字。总共参与计算的字的个数。 // 起始位 偏移量,字。第一个数据的地址相对VB0的增量。 // 模式 字节。计算对象的位长。0:8位;1:16位;2:32位。 // 执行过程:每执行一次得到一次计算结果。 VAR_INPUT 连续数:WORD; 首址偏移:WORD; // 这是对VB0的偏移量。 模式:BYTE; // 0:字节;1:字;2:双字 END_VAR VAR_OUTPUT 域和:DWORD; END_VAR VAR 循环值:WORD; 过程量:DWORD; 希望人过留名下载过程序的朋友签个名就是了 起始位:DWORD; END_VAR BEGIN Network 1 // 确定具体指针值。清除旧值。 LD SM0.0 MOVW 16#0800, LW15 MOVW LW2, LW17 ANDB 2#11, LB4 MOVD +0, LD5 MOVW +0, LW9 Network 2 // 用循环累加。循环次数是数据的个数。 LD SM0.0 FOR LW9, +1, LW0 Network 3 // 按照模式指定的位长转换成双字进行计算。 利用起始位作指针,指示循环过程中变化的当前累加位置。指针值增加,指向下一个对象。 LDN L6.0 AN L6.1 BTI *LD15, LW11 ITD LW11, LD11 INCD LD15 Network 4 // 这是16位时计算 LD L6.0 AN L6.1 ITD *LD15, LD11 +D 2, LD15 Network 5 // 这是32位时计算 LD L6.1 MOVD *LD15, LD11 +D 4, LD15 Network 6 // 第一个值加进和中。 LD SM0.0 +D LD11, LD5 Network 7 NEXT END_SUBROUTINE_BLOCK INTERRUPT_BLOCK INT_0:INT0 TITLE=中断程序注释 BEGIN Network 1 // 网络标题 // 网络注释 END_INTERRUPT_BLOCK



Copyright 1998-2021. All rights reserved.
工信部备案:冀ICP备19032940号-1|公安部备案号:13020802000209