汇编实验3 从键盘输入数据并显示的实验

汇编实验3

编写程序,将键盘接收到的四位十六位进制数据转换为等值的二进制数,再显示在终端上。

CRLF    MACRO
        MOV    DL,0DH
        MOV    Ah,02H
        INT    21H
        MOV    DL,0AH
        MOV    AH,02H
        INT    21H
ENDM ;定义宏功能用于换行

data segment;定义输出的提示信息
MESS db 'input a hexadecimal number:',0DH,0AH,'$'
MESS1 db 'input error!',0DH,0AH,'$'
data ends
;定义栈段
stack segment stack 'stack'
STA db 128 dup(?)
TOP EQU LENGTH STA
stack ends

code segment
ASSUME cs:code,ds:data,ss:stack
START:;初始化相关寄存器
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,TOP

        xor bx,bx;将bx清零
        xor cx,cx;将cx清零
        LEA dx,MESS;调用中断程序输出提示信息MESS
        mov ah,09H
        int 21H

        call GETNUM;GETNUM调用GETNUM接收数据
        CRLF;调用宏功能输出换行符
        mov cx,10h;循环16次
L2:     rol bx,1;循环左移,将每次输出数据放到bx最低位
        mov dl,bl
        and dl,0001h;屏蔽高七位
        add dl,30h;转化为ASCII码
        mov ah,02H;调用中断程序输出结果
        int 21H
        loop L2
        ;退出程序
        mov ax,4C00H
        int 21H
;============================
;定义GETNUM子程序,结果存于bx中
GETNUM PROC near
L1:
        push cx;保存cx,即已输入字符个数
        mov cl,4;移位次数
        shl bx,cl
        mov ah,01h;调用中断程序接收单个字符
        int 21H
        cmp al,'f'
        ja ERROR;输入数据范围有误,跳至错误处理部分
        cmp al,'a'
        jae change;尝试改为大写继续判断
        jmp CMP3;不是大写16进制数
change:
        sub al,20h
CMP3:
        cmp al,'F'
        ja ERROR;输入数据范围有误,跳至错误处理部分
        cmp al,'A'
        jb CMP1;跳至数字判断
        sub al,07h;转化为16进制
        jmp CMP2
CMP1:
        cmp al,'9'
        ja ERROR;输入数据范围有误,跳至错误处理部分
CMP2:;转化为16进制
        cmp al,'0'
        jb ERROR
        sub al,30h
        mov ah,0
        add bx,ax
        pop cx
        inc cx
        cmp cx,4
        je return
        jmp L1
ERROR:;输入数据有误,退出程序
        CRLF
        LEA dx,MESS1
        mov ah,09H
        int 21H
        mov ax,4C00H
        int 21H
return:
        ret
GETNUM ENDP
;============================
code ends
end START

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy-wen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值