进制数据输出的通用程序

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardID=126&ID=167744

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bccn.net
*/ 作者: liyun2060    E-mail:blakcuttlefish@hotmail.com    
*/ 时间: 2007-9-5  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

昨天看了别人的文章,然后写了一个进制输出的程序,程序实在是太乱了。并且可调试性也很差。于是今天重新写了一个。

进制输出的原理很简单,就是先建一个‘0123456789ACDEF’的数据表

然后根据 除(2,10或者16 这要看你想以什么进制数据形式输出了) 取余,再拿商去除(2,10,16) 再取余的原理。  拿余数跟数据表比较,取得相应的ASCII码。

哎说不清楚,还是看程序吧。自认为程序写的还算清晰明了

assume cs:codes
codes  segment
  
start:
       mov ax,cs
       mov ds,ax
       mov ax,0b800h
      
       mov es,ax
      
       mov cl,2
       mov dl,011111111b
       call data_turn
       mov cx,ax
       mov di,160*10+40
moves: mov ah,[si]
        mov es:[di],ah
        inc si
        add di,2
        loop moves
       mov ah,04ch
       int 21h
      

;/**////////////////////////////////////////////////////////////////////////////////转换程序开始nc
;数制转换通用程序
;功能:将内存中的数据转换成以2进制 16进制 或 10进制 表示的 相应的ASCII码字符串
;进口参数CL  需要转换成的进制
;进口参数DL  被转换数
;出口参数AX  转换后的字符串的长度
;出口参数SI  转换后的字符串的起始偏移地址  段地址为CS

data_turn proc
            jmp turn_start
            table_t1 db '0123456789abcdef'
            table_t2 db 8 dup(?)  ;用来存储转换后的数据
turn_start: push ds
            push bx
            
            mov ax,cs
            mov ds,ax
            mov si,7    
            mov al,dl
            cmp al,0
            je dl_zero  ;如果被转换数为0 则直接将0写入table_t2+7处
        LP: xor bh,bh
            xor ah,ah
            DIV cl
            mov bl,ah
            mov bh,table_t1[bx]
            mov table_t2[si],bh
            dec si
            cmp al,0
            je turn_end
            jmp LP
            
            
dl_zero:  mov ds:[table_t2+7],'0'
           mov ax,1
           lea si,table_t2
           add si,7
           jmp over
turn_end:  mov ax,7
           sub ax,si
           lea si,table_t2
           add si,8
           sub si,ax
  
    over:  pop bx
           pop ds
           ret
data_turn  endp
;/**//////////////////////////////////////////////转换程序结束

codes ends
end start

内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置与训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则和命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式和控制符号在多条物理通道上的一致性和正确性。文档还涵盖了链路性能监控和错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计和实现支持多种数据速率和编码方式的InfiniBand设备;② 开发链路初始化和训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控和错误检测,提高系统的可靠性和稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考和技术交流使用。文档内容详尽,对于理解和实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解和应用规范中的各项技术要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值