终于懂了汇编代码为什么从键盘上输入字符,将该字符的ASCII显示在屏幕上必须要加30或37(附汇编代码)

规则:二进制转换成十六进制且输出,四位四位判断其值范围,如果在0000-1001范围加30H,如果在1010-1111范围加37H

例如:从键盘上输入A,系统存的是二进制数01000001B,先把8bit分成高低各4bit,先输出高四位,因为0100<1001,所以加30H,0100B=04H,04H+30H=34H,ASCII为34H对应的是数字4,所以输出4,再输出低四位,0001B<1001B,所以加30H,0001B=01H,01H+30H=31H,ASCII为31H对应的数字是1,所以屏幕上输出1,这样就完成了A的ASCII的显示(41)

再举一个例子:从键盘上输入Z,系统存的是01011010B,先处理高四位0101,因为0101B<1001B,所以加30H,0101B=05H,05H+30H=35H,ASCII为35H对应的是5,所以在屏幕上先输出5,再处理低四位1010,1010B>=1010B,所以加37H,1010B=0AH,0AH+37H=41H,ASCII为41H对应的是A,所以屏幕上输出A,这样就完成了Z的ASCII的显示(5A)

再举一个例子:从键盘上输入6,系统存的是00110110B,先处理高四位0011,0011B<1001B,所以+30H,0011B=03H,03H+30H=33H,ASCII为33H对应的是数字3,所以在屏幕上输出一个3,再处理低四位0110,0110B<1001B,所以+30H,0110B=06H,06H+30H=36H,ASCII为36H对应数字6,所以屏幕上输出6,这样就完成了6的ASCII的显示(36)

下面是代码

;由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上
DATA SEGMENT
    MES DB 'Please input a char',0AH,0DH,'$'
    KONG DB 0AH,0DH,'$'
    SD DB 'The ascII is $'
    char1 DB 0
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
    MOV DS,AX
    MOV DX,OFFSET MES   ;显示提示信息
    MOV AH,09H
    INT 21H  ;提示信息完成
    MOV AH,1
    INT 21H ;键盘输入字符
    MOV char1,AL
    MOV AH,09H
    MOV DX,OFFSET KONG  ;显示换行信息
    INT 21H
    MOV DX,OFFSET SD
    MOV AH,09H
    INT 21H   ;显示提示信息
    AND AL,0F0H  ;取高四位
    MOV CL,4
    SHR AL,CL ;逻辑右移
    CMP AL,0AH ;是否是A以上的数
    JB C2
    ADD AL,07H  
C2: ADD AL,30H
    MOV DL,AL  ;显示字符
    MOV AH,02H
    INT 21H
    MOV AL,char1
    AND AL,0FH  ;取低四位
    CMP AL,0AH
    JB C3
    ADD AL,07H
C3: ADD AL,30H
    MOV DL,AL
    MOV AH,02H
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值