首页
社区
课程
招聘
未解决 [求助]将 32 位二进制整数转换为 ASCII 码的二进制形式
2021-2-16 16:22 3062

未解决 [求助]将 32 位二进制整数转换为 ASCII 码的二进制形式

2021-2-16 16:22
3062

题:将 32 位二进制整数转换为 ASCII 码的二进制形式(汇编描述)

 

不是很清楚这转换关系是怎么样的;
这种转换一般用在什么场景下;
求助求助!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (4)
雪    币: 807
活跃值: (1873)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
老伙计 2021-2-16 18:21
2
0
     很简单啊,整数 0~127 本身就是字符编码,比如,按字符显示整数 65 就是字符 'A',66 是 'B',97 是 'a' ,98 是 'b',48 是字符 '0' ,49 是 '1' 等等。 
雪    币: 1523
活跃值: (2073)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
herculiz 1 2021-2-16 18:45
3
1
这是源码,我感觉这就单纯做了个复制,二进制到ASCII好像没什么变化
    ;---------------------------------------------------------
    BinToAsc PROC
    ;
    ; 将 32 位二进制整数转换为 ASCII 码的二进制形式。
    ; 接收:EAX = 二进制整数,EST 为缓冲区指针
    ; 返回:包含 ASCII 码二进制数字的缓冲区
    ;---------------------------------------------------------
        push    ecx
        push    esi
       
        mov    ecx,32                    ; EAX 中的位数
    L1:    shl    eax,1                  ; 最高位移入进位标志位
        mov    BYTE PTR [esi],'0'        ; 选择0作为默认数字
        jnc    L2                        ; 如果进位标志位为0,则跳转到L2
        mov    BYTE PTR [esi],'1'        ; 否则将1送入缓冲区
    L2:    inc    esi                    ; 指向下一个缓冲区位置
        loop    L1                       ; 下一位进行左移
        pop    esi
        pop    ecx
        ret
    BinToAsc ENDP
雪    币: 807
活跃值: (1873)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
老伙计 2021-2-16 23:31
4
0

     变化在 ESI 所指向的 32 个字节的内存单元

     假设 EAX = 0x12345678,那么:

EAX = 0x12345678
二进制位: 0001 0010 0011 0100 0101 0110 1110 1000
    ESI: '00010111011010100010110001001000'

      在函数返回的时候,内存地址 esi - 32 中储存了根据 eax 二进制位形成的逆序(左右颠倒)排列的二进制字符串。

最后于 2021-2-17 00:38 被老伙计编辑 ,原因:
雪    币: 1523
活跃值: (2073)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
herculiz 1 2021-2-17 10:02
5
0
哦哦原来是实现小端存储功能,感谢感谢
游客
登录 | 注册 方可回帖
返回