实力和荣誉的象征。小子不才,谁能将此汇编转换成C语言,关于网络传输中的校验功能的。——100分

fellowcheung 2004-06-12 12:35:36
1.(2101)《提高汉明码对突发干扰的纠错能力》P15
原程序情单如下:
. ; [16,11,4] 增广汉明码校验矩阵:
; D15 D14 D13 D12 D11 D10 D9 D7 D6 D5 D3 D16 D8 D4 D2 D1 校验码
; | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | C4=0FFFFH
; | 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 | C3=0FE08H
; | 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 | C2=0F1C4H
; | 1 1 0 0 1 1 0 1 1 0 1 0 0 0 1 0 | C1=0CDA2H
; | 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 | C0=0AB61H

;*******************************************************
;16比特汉明码测试程序(原始数据11字节,编码结果为16字节)
;可纠正数据块中任意位置的最多连续1个字节的错误
;*******************************************************
SADD EQU 2000H ;原始数据存放首址
DADD EQU 2020H ;编码结果存放首址
SQADD EQU 2040H ;编码结果重新排序后存放地址
JMADD EQU 2060H ;解码结果存放首址
BMBUF EQU 30H ;编码数据缓冲区(8字节)
SQBUF EQU 40H ;编码排序缓冲区(16字节)
ERR EQU 20H ;出错标志

ORG 0000H
LJMP MAIN

ORG 0100H
MAIN: LCALL DATAS ;生成一批原始数据
LCALL HAMBM ;汉明码编码程序
LCALL HAMJM ;汉明码解码程序(解码之前,可以人为加入差错)
STOP: LJMP STOP
NOP
NOP
NOP
;*******************************************************
;原始数据生成子程序
;*******************************************************
DATAS: MOV DPTR,#SADD
MOV R2,#11
CLR A
DATAS1: MOVX @DPTR,A
INC A
INC DPTR
DJNZ R2,DATAS1
RET
;*******************************************************
;汉明码编码子程序
;*******************************************************
HAMBM: MOV DPTR,#DADD ;编码结果首址
MOV R1,DPL
MOV P2,DPH
MOV DPTR,#SADD ;原始数据首址
HAMBM1: MOV R0,#BMBUF
MOV R3,#8
HAMBM2: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R3,HAMBM2 ;取8个字节数据放入缓存区
MOVX A,@DPTR ;再取3个字节数据分别放入R5,R6,R7
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A ;
INC DPTR
MOV R0,#BMBUF
HAMBM3: MOV A,@R0
MOV R3,A ;从缓存区取1个字节数据放入R3
MOV A,R7 ;从R5,R6,R7分别取1位放入R4与R3组成11位数据
RLC A
MOV R7,A
RRC A
MOV R4,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R4
RRC A
MOV R4,A
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RRC A
ANL A,#0E0H
MOV R4,A ;
ANL A,#61H ;对D3,D5,D7,D9,D11,D13,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0ABH ;
JNB P,HAMBM4
CPL C
HAMBM4: MOV A,R4
MOV ACC.0,C
MOV R4,A ;校验结果存入D1
ANL A,#0A2H ;对D3,D6,D7,D10,D11,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0CDH ;
JNB P,HAMBM5
CPL C
HAMBM5: MOV A,R4
MOV ACC.1,C
MOV R4,A ;校验结果存入D2
ANL A,#0C4H ;对D5,D6,D7,D12,D13,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0F1H ;
JNB P,HAMBM6
CPL C
HAMBM6: MOV A,R4
MOV ACC.2,C
MOV R4,A ;校验结果存入D3
ANL A,#08H ;对D9,D10,D11,D12,D13,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0FEH ;
JNB P,HAMBM7
CPL C
HAMBM7: MOV A,R4
MOV ACC.3,C
MOV R4,A ;校验结果存入D4
MOV C,P
MOV F0,C
MOV A,R3 ;全字节偶校验
JNB P,HAMBM8
CPL C
HAMBM8: MOV A,R4
MOV ACC.4,C
MOV R4,A ;校验结果存入D16
MOV A,R3
MOVX @R1,A
INC R1
MOV A,R4
MOVX @R1,A
INC R1
INC R0
CJNE R0,#BMBUF+8,HAMBM3
LCALL SEQU
RET
;*******************************************************
;汉明码编码排序子程序
;*******************************************************
SEQU: MOV DPTR,#SQADD ;编码结果重新排序存放地址
MOV R1,DPL
MOV P2,DPH ;
MOV DPTR,#DADD ;汉明码编码存放地址
MOV R0,#SQBUF
MOV R2,#16
SEQU1: MOVX A,@DPTR ;把汉明码读入缓冲区
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,SEQU1 ;
MOV R7,#SQBUF
MOV R4,#2
SEQU2: MOV R3,#8
SEQU3: MOV R2,#8
MOV A,R7
MOV R0,A
SEQU4: MOV A,@R0
RLC A
MOV @R0,A
MOV A,B
RLC A
MOV B,A
INC R0
INC R0
DJNZ R2,SEQU4
MOVX @R1,A
INC R1
DJNZ R3,SEQU3
INC R7
DJNZ R4,SEQU2
RET
;*******************************************************
;汉明码编码排序恢复子程序
;*******************************************************
SEQUB: MOV DPTR,#DADD ;汉明码编码恢复地址
MOV R1,DPL
MOV P2,DPH ;
MOV DPTR,#SQADD ;编码结果重新排序存放地址
MOV R0,#SQBUF
MOV R2,#16
SEQUB1: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,SEQUB1
MOV R4,#8
SEQUB2: MOV R3,#2
MOV R2,#8
MOV R0,#SQBUF
SEQUB3: MOV A,@R0
RLC A
MOV @R0,A
MOV A,B
RLC A
MOV B,A
INC R0
DJNZ R2,SEQUB3
MOVX @R1,A
INC R1
MOV R2,#8
DJNZ R3,SEQUB3
DJNZ R4,SEQUB2
RET
;*******************************************************
;汉明码解码子程序
;*******************************************************
HAMJM: LCALL SEQUB
MOV ERR,#0 ;出错标志初始化。
MOV DPTR,#JMADD ;解码结果存放首址
MOV R1,DPL
MOV P2,DPH
MOV DPTR,#DADD ;编码结果存放首址
HAMJM1: MOV R0,#8
HAMJM2: MOVX A,@DPTR
MOV R3,A
MOV C,P
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
JNB P,HAMJM3
CPL C
HAMJM3: MOV F0,C ;全字节偶校验结果
MOV B,#0
MOV A,R4 ANL A,#61H ;对D1,D3,D5,D7,D9,D11,D13,D15进行偶校验
MOV C,P
MOV A,R3 ANL A,#0ABH ; JNB P,HAMJM4 CPL C
HAMJM4: MOV B.0,C ;存校验结果(C1)
MOV A,R4 ANL A,#0A2H ;对D2,D3,D6,D7,D10,D11,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0CDH ; JNB P,HAMJM5 CPL C
HAMJM5: MOV B.1,C ;存校验结果(C2)
MOV A,R4
ANL A,#0C4H ;对D4,D5,D6,D7,D12,D13,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0F1H ; JNB P,HAMJM6 CPL C
HAMJM6: MOV B.2,C ;存校验结果(C3)
MOV A,R4
ANL A,#08H ;对D8,D9,D10,D11,D12,D13,D14,D15进行偶校验
MOV C,P
MOV A,R3
ANL A,#0FEH ; JNB P,HAMJM7 CPL C
HAMJM7: MOV B.3,C ;存校验结果(C4)
MOV A,B ;取三个校验结果。 JZ HAMJMC ;汉明码无差错,信息有效。 JB F0,HAMJM8 ;差错判断。 MOV ERR,#0FFH ;发现两个差错,设立出错标志 LJMP HAMJMC
HAMJM8: INC A MOVC A,@A+PC ;一个差错,查表得到纠错位置码。 SJMP HAMJM9 DB 01H,02H,20H,04H DB 40H,80H,01H,08H DB 02H,04H,08H,10H DB 20H,40H,80H HAMJM9: XCH A,B INC A MOVC A,@A+PC SJMP HAMJMA DB 0,0,0,0,0,0,1,0 DB 1,1,1,1,1,1,1,0 HAMJMA: JNZ HAMJMB MOV A,B XRL A,R4 ;纠错处理。 MOV R4,A ;保存纠错后的汉明码。 SJMP HAMJMC HAMJMB: MOV A,B XRL A,R3 ;纠错处理。 MOV R3,A ;保存纠错后的汉明码。 HAMJMC: MOV A,R3 ; MOVX @R1,A INC R1 MOV A,R4 RLC A MOV R4,A MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R6 RLC A MOV R6,A MOV A,R4 RLC A MOV R4,A MOV A,R7 RLC A MOV R7,A DEC R0 MOV A,R0 JZ HAMJMD LJMP HAMJM2 HAMJMD: MOV A,R5 MOVX @R1,A INC R1 MOV A,R6 MOVX @R1,A INC R1 MOV A,R7 MOVX @R1,A RET END
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaphoon 2004-06-12
  • 打赏
  • 举报
回复
给我100块
我可能考虑一下
100分值个屎
leonchew 2004-06-12
  • 打赏
  • 举报
回复
楼主,去汇编版主问问了。
也太长了吧。
liushu01 2004-06-12
  • 打赏
  • 举报
回复
不会,楼主还是自己做吧
GSK-980TDa数控系统模拟软件单机版(原厂出品) 以下是我学习使用该软件的经验: 1、该软件为广数数控公司出品,无需破解即可使用; 2、该软件没有设置手动锁紧卡盘,但可以通过录入方式,键入M12执行卡盘锁紧;须通过录入方式设定主轴转速好转向后才可以手动启动主轴。 3、 修改下面的参数设置: 才可以机械回零后对刀 系统参数No.004、No.005、No.012必须按下述进行设置: 004 号参数 01001000 005 号参数 00010011 012 号参数 10101111 发贴的主要目的是:希望大家能把学习应用该软件出现的问题和经验贴出来,让大家共同进步 pegasus122 2008-11-12 22:40 Re:GSK-980TDa数控系统模拟软件单机版(原厂出品) 说明书和贴图 完美支持宏程序,下图是我用割刀加工出的梯形螺纹 chaohui 2009-05-06 10:50 本人通过学习该软件后的的体会,下面把如何对刀的方法教给大家,请大家多指教。 1.打开软件,通过楼主介绍的方法把参数修改好,系统出现报警,则不去管他,修改参数后,报警自动消失; 2.X,Z 轴回零; 3.假设刀架上已经装上了你加工需要用到的四把刀,且当前位置是1号刀待加工。 4.按[程序]——录入方式(按一下翻页键,到“程序状态”这一栏,也就是MDI模式)——T0100(也可以是T100,目的是清空1号刀的刀补)——按[输入]键——再按[循环启动]键 ,此步骤目的是清空1号刀的刀补。下面开始手动对刀: 5.对Z轴:[手动]方式——车Z轴端面,X轴方向退出Z方向不变——[录入]方式(MDI 模式画面)——G50[输入]键——Z0.0[输入]键——再按[循环启动]键。 6.对X轴:[手动]方式——车X轴端面,Z轴方向退出X方向不变,移动到安全位置停主轴,测量外径(系统有自带的测量功能,实际操作需要自己手动量具测量,一般是千尺,所得数据为切削后的X直径)——[录入]——G50[输入]键——X外径值 [输入]键——再按[循环启动]键。1号刀对刀完成。 7.接下去要对的是2号刀,这里要十注意,“初学者可能会在手动方式下,将2号刀换到待加工位置,这是不允许的,手动换刀将清除原来的对刀数据,对刀失败。”必须按照1号刀对刀的方法,在MDI 模式下 输入 T200,按[输入]键——再按[循环启动]键,刀架上的待加工刀便换成了2号刀,且将2号刀补清空。接下去的对刀可以简单一些,其他步骤依旧按照1号刀的方法进行,只是在试切之后,按[录入]——[刀补],光标移动到序号为02的位置,若你的对的刀是2号刀,则输入T2——[输入],Z0.[输入]。然后在试切X 端面,将测量所得的X径按照输入Z的方法输入即可完成2号刀的的对刀。 8.3.4号刀的对刀方法和2号刀相同 9.千万注意对刀后不可以使用手动换到,如果需要换刀,也要在MDI模式下换刀,或者编写换刀程序。如T101,意思是将刀架上的待加工刀换成1号刀,连刀补数据一起调用。 这些是本人自己学习以及鉴戒了前辈的一些方法,将该软件的使用方法于大家共享,随着我进一步的学习和使用,陆续还有会其他的操作技巧和大家享,朋友若有似懂非懂的地方,可以发帖询问。小弟不才,若有出错或者说的不明白的地方,请各位批评指正,你们的批评是我前进的动力。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧