输入10个数,存入变量BUF中,如何将每个单元的数据以ASCII码形式显示出来?

从键盘输入10个数,存入变量BUF中,将每个单元的数据以ASCII码形式显示出来:例如,某单元数据为18(12H),则显示31H(数字1的ASCII码)、32H(数字2的ASCII码)。要求:
(1)输入10个数用子程序实现
(2)转换功能(二位16进制数转换为ASCII码)用子程序实现
(3)显示功能(显示各个ASCII码)用子程序实现
(4)主程序循环调用子程序实现转换和显示

DATA SEGMENT
    BUF DB 10 DUP(?)
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX

    LEA SI,BUF
    CALL INPUT
    MOV CX,10
    SSS:CALL TRANS
        CALL OUTPUT
        INC SI
        LOOP SSS
    MOV AH,4CH
    INT 21H

    INPUT PROC
    MOV CX,10
    L0:
    MOV AH,01H
    INT 21H
    CMP AL,'0'
    JB L0
    CMP AL,'9'
    JA L1
    SUB AL,30H
    MOV [SI],AL
    JMP L2
    L1:
    CMP AL,'A'
    JB L0
    CMP AL,'F'
    JA L0
    SUB AL,37H
    MOV [SI],AL
    L2:
    INC SI
    LOOP L0
    RET
    INPUT ENDP

    TRANS PROC
    PUSH CX
    LEA SI,BUF
    MOV AL,[SI]
    MOV BL,AL
    MOV CL,4
    SHR BL,CL
    CMP BL,9
    JBE L3
    ADD BL,7H
    L3:
    ADD BL,30H
    AND AL,0FH
    CMP AL,9
    JBE L4
    ADD AL,7H
    L4:
    ADD AL,30H
    POP CX
    RET
    TRANS ENDP

    OUTPUT PROC
    PUSH CX
    MOV CL,4
    MOV DL,BL
    MOV BH,BL
    SHR DL,CL
    CMP DL,9
    JBE L5
    ADD DL,7H
    L5:
    ADD DL,30H
    MOV AH,02H
    INT 21H
    AND BH,0FH
    CMP BH,9
    JBE L6
    ADD BH,7H
    L6:
    ADD BH,30H
    MOV DL,BH
    MOV AH,02H
    INT 21H

    MOV CH,AL
    MOV DH,AL
    SHR CH,CL
    CMP CH,9
    JBE L7
    ADD CH,7H
    L7:
    ADD CH,30H
    MOV DL,CH
    MOV AH,02H
    INT 21H
    AND DH,0FH
    CMP DH,9
    JBE L8
    ADD DH,7H
    L8:
    ADD DH,30H
    MOV DL,DH
    MOV AH,02H
    INT 21H
    POP CX
    RET
    OUTPUT ENDP

    CODE ENDS
    END START

为什么无论输入哪十个数,都输出3030303030303030303030303030303030303030?
如何修改?
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
C语言对用堆导入并显示的数据进行进一步的处理
3
以下代码在输入一个字符数大于20的字符串,为什么strlen(buf)会等于19。
1
winform 怎么解决chartcontrol控件数据更新过快导致的索引超范围的问题
0
C++课程设计其中一项是把数据输入到文件中,现在想要把文件数据读取存入到数组里并且搜索查询输出部分数据
1
关于Java网络通信_UDP的几个问题
1
如何实现人员抽点的时候抽到指定人员,而不是随机人员。
1
sprintf将ascll转换为16进制出错?
1
关于Netty4 的channelread的ByteBuf写回客户端信息的迷惑 。
2
帮我把下面的代码改一下,改成一直重复运行,直到用户输入N或者n,程序退出。(C/C++)
2
C语言read函数读入字节数问题
1
FFmpeg - 为什么从pcm提取音频,编码为mp3以后,时长变多了,声音也颤抖
1
关于liunx下7寸LCD显示比利时国旗代码编写
1
修改Linux内核,添加系统调用,输出CPU等信息到屏幕上,调整printk打印级别没有用处,使用tty结构体的ops中的write函数,在测试中,运行测试代码就会卡在界面啥也出不来,重启之后运行测试代码啥也不显示,代码如下
0
使用RC522写入block 0,写特殊指令0x40和0x43时超时。
5
STM32为什么用串口接收数据不全,时常丢失?
0
有大佬能够通过stdin和stdout来获取终端的大小吗?
1
在线编程习题“2110: 虚张声势”总是不能拿满分,找不到问题出在哪了?
0
udp洪水攻击照着别人的视频敲了以后出现transport endpoint is not connected和 Invalid argument怎么解决这个问题?
0
用__attribute__ ((at()))定义的绝对地址为什么会被篡改?
1
shutdown关闭读这一半后为什么还能收到对端的数据。