LD SM0.0MOVD +0, AC0MOVB *#参数:*LD0, AC0//字节相加求和FOR #循环计数:LW7, +2, #循环:LW4+I *#参数:*LD0, AC0 //+22 计数值VW10从1增加到26INCD #参数:LD0LD SM0.0//取校验和的最低字节作为校验和MOVB AC0, #输出:LB6//校验完毕
问题补充:MOVB *#参数:*LD0, AC0 在AC0中保存的是传过来的数,还是地址? +I *#参数:*LD0, AC0为什么要这样加?我是在公司实习的学生,对求和校验,CRC校验,奇校验,偶校验看的不明白,不知道这种算法的编程步骤,谢谢您的回答,可以打扰问一下吗,
最佳答案
可以很肯定的告诉你,你的程序计算校验和,肯定是错误的
因为你做的是16位的加法指令,如第一次做的是VW0+AC0=AC0 第二次是VW1+AC0=AC0注意西门子VW0和VW1是共用了VB1这个存储空间的你的本来要做的是VB0+VB1+VBx=AC0但西门子没有8位的加法指令,那么你可以在加法之前用逻辑于指令,就是把16位寄存器的高8位屏蔽为0就是16#00FF AND *LD0 =AC1然后再用AC1+AC0 =AC0INC LD0这样就OK了