汇编实现CRC编码(7,3)码

该博客介绍了如何使用汇编语言在DOS环境下实现CRC(7,3)编码的过程。通过输入字符,程序将其ASCII码转换为二进制,并通过特定算法计算出CRC码,然后以二进制形式输出。文章详细展示了BIN子程序用于二进制输出,而MDIV子程序用于计算CRC编码。" 129061951,17393323,Postman接口测试工具详解,"['测试工具', 'Postman', '接口测试']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DATA SEGMENT                         ;数据段开始
STR DB ' CRC CODE IS:$'                ;提示信息
DATA ENDS                        ;数据段结束
CODE SEGMENT                        ;代码段开始
MAIN PROC FAR                        ;主函数
  ASSUME CS:CODE,DS:DATA                ;段对齐
START:                                ;执行代码开始
        MOV AX,DATA                        ;数据段地址送入AX
        MOV DS,AX                        ;数据段寄存器值设为AX
        MOV AH,1                ;选定一号DOS中断方式
        INT 21H                        ;实现输入一个字符
LX:
        MOV BL,AL                ;输入字符的ASCII码送入BL
        CALL BIN                        ;以二进制形式输出其ASCII码值
        AND AL,0F0H                ;取AL中高四位
        CALL MDIV                ;输出其高四位对应的CRC码(7,3)码
        MOV AL,BL                ;BL数据送入AL
        AND AL,0FH                ;取低四位
        MOV CL,4                        ;
        SHL AL,CL                ;把AL的低四位送入高四位
        CALL MDIV                ;输出其对应的CRC码
        MOV DL,0DH
        MOV AH,2
        INT 21H                        ;输出回车
        MOV DL,0AH
        INT 21H                        ;输出换行
        MOV AH,1                ;
        INT 21H                        ;输入下一个字符
        CMP AL,13                ;判断是不是回车
        JNZ LX                        ;不是则继续循环
        MOV AX,4C00H                ;
        INT 21H                        ;返回操作系统
MAIN       ENDP                        ;主函数结束
BIN          PROC                        ;BL中的数据二进制形式输出
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX                        ;保存各寄存器的值
        MOV CL,8                        ;设置循环次数为8
        MOV AH,2                ;设置AH初始值为2
        CMP DL,'N'                ;判断是否需要回车换行
        JZ GOON                        ;不需要则跳过下面的回车换行
        MOV DL,0AH                ;
        INT 21H                        ;换行
        MOV DL,0DH
        INT 21H                        ;回车
GOON:
        SHL BL,1                        ;BL逻辑左移一位
        JC OUT1                        ;如果移入CF的值为一则跳到OUT1输出'1'
        MOV DL,30H
        INT 21H                        ;输出'0'
        JMP EXIT1                ;跳过下面的输出'1'
OUT1:     
        MOV DL,31H
        INT 21H                        ;输出'1'
EXIT1:            
        LOOP GOON                ;循环
        POP DX
        POP CX
        POP BX
        POP AX                        ;恢复各寄存器的值
        RET                        ;子程序返回
BIN          ENDP                        ;子程序结束
MDIV        PROC                        ;将AL中的数据转换为CRC码(7,3)码
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX                        ;保存个寄存器的值
        MOV BL,AL                ;保存AL的值到BL
        MOV BH,AL                ;保存AL的值到BH
        MOV CL,4                        ;
        SHR BL,CL                ;BL中的数据高四位送入低四位
        CALL BIN                        ;二进制输出其欲编码的数据
        LEA DX,STR                ;提示信息的地址送入DX
        MOV AH,9
        INT 21H                        ;显示提示信息
        MOV DL,BH                ;欲编码数据送入DL
        MOV BL,BH                ;欲编码数据送入BL
        MOV CX,4                ;设置循环次数
LOP1:
        SHL BH,1                        ;判断BH最高位
        JNC NEXT                        ;为0则跳过下一行
        XOR BL,10110000B        ;实现BL中的高四位与1011进行模2加减
NEXT:
        SHL BL,1                        ;BL数据左移一位
        MOV BH,BL                ;将当前BL值送入BH
        LOOP LOP1                ;循环
        MOV CL,5                        ;设置移位次数
        SHR BL,CL                ;BL逻辑右移5位
        SHR DL,1                        ;DL逻辑右移1位
        XOR DL,BL                ;使DL中的4位原数据后面接上与BL中的3位余数
        MOV BL,DL                ;保存DL到BL
        MOV DL,'N'                ;设置在BIN函数中输出时不换行
        CALL BIN                        ;二进制输出其对应的CRC编码
        POP DX
        POP CX
        POP BX
        POP AX                        ;恢复各积存器的值
        RET                        ;子程序返回
MDIV ENDP                        ;子程序结束
CODE ENDS                        ;代码段结束
        END START                        ;程序结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值