📄 task_2.asm
字号:
;Task_2.asm 习题3_3 第2题
;2. 从键盘输入一个4位十进制数,然后以16进制形式显示在屏幕上,试编程;
data segment para
str1 db 0dh, 0ah, 'Please input(1000~9999): ', '$' ;输入提示
str2 db 0dh, 0ah, 'The hex result is: ', '$' ;输出提示
str3 db 0dh, 0ah, 'Input Error!', '$' ;输入错误提示
D_BUF db 4 dup (0) ;存放4个输入的10进制数, 千位在前, 个位在后
H_BUF db 4 dup (' '), 'H', '$' ;存放输出ASCII值, 初始化为空格
num dw 0 ;存放16位整数
data ends
ss_seg segment stack
dw 50 dup(0)
ss_seg ends
code segment
assume cs:code,ds:data,ss:ss_seg
main proc far
mov ax, data
mov ds, ax
main2: lea dx, str1 ;显示输入10进制数提示符
mov ah, 9
int 21h
lea bx, D_BUF
mov cx, 4
main1: push bx ;防止调用 int 21h时,破坏bx, cx中的值, 可以使用SI和DI寄存器
push cx
mov ah, 1 ;循环实现4位十进制数输入
int 21h
call asc2bin ;将ASCII转换为二进制数
pop cx
pop bx
mov [bx], al
inc bx
loop main1
lea bx, D_BUF
call bin2hex ;将输入的4个独立的数组合成一个16位的整数
mov num, ax
cmp num, 1000
jb error
cmp num, 9999
ja error
lea dx, str2 ;显示输出结果提示
mov ah, 9
int 21h
mov ax, num
lea bx, H_BUF
call hex2asc ;将16进制数转换成ASCII码,存于H_BUF开始的4个单元
lea dx, H_BUF
mov ah, 9
int 21h
;int 3
mov ax, 4c00h
int 21h
error: lea dx, str3 ;显示输入错误提示
mov ah, 9
int 21h
jmp main2
main endp
;输入参数:AL中存放要转换的ASCII值
;输出参数:AL中存放转换后得到的二进制数
;功能:将ASCII转换为二进制数
asc2bin proc
sub al, 30h
cmp al, 9
jbe asc2bin_1
sub al, 7
asc2bin_1:
ret
asc2bin endp
;输入参数:bx中存放要转换的4个独立十进制数存储单元的首地址
;输出参数:ax中存放组合后的16位整数
;功能:将4个独立的数组合成一个16位整数
bin2hex proc
push si
push di
mov al, [bx] ;得到千位
and ah, 0
mov si, 1000
mul si
mov di, ax ;将结果保存在di中,由于是4位十进制数,因此乘以1000后,结果将保存在ax中,dx值肯定为0
inc bx
mov al, [bx] ;得到百位
and ah, 0
mov si, 100
mul si
add di, ax
inc bx
mov al, [bx] ;得到十位
and ah, 0
mov si, 10
mul si
add di, ax
inc bx
mov al, [bx] ;得到个位
and ah, 0
add ax, di ;得到转换后的16位整数,并保存在ax中
pop di
pop si
ret
bin2hex endp
;输入参数:ax中存放要转换16进制数
; bx中存放转换后得到的ASCII的存储单元首地址
;功能:将一个16位整数转换成相应的ASCII
hex2asc proc
push si
push cx
push dx
mov si, 4 ;需要循环左移4次
mov cl, 4 ;每次循环左移4位
hex2asc_1:
rol ax, cl
mov dx, ax ;保存中间结果
and ax, 000Fh ;屏蔽高12位
call bin2asc ;得到低4位所对应的ASCII
mov [bx], al
mov ax, dx
inc bx
dec si
jnz hex2asc_1
pop dx
pop cx
pop si
ret
hex2asc endp
;输入参数:AL中存放要转换的二进制数
;输出参数:AL中存放转换后得到的ASCII值
;功能:将二进制数转换为ASCII
bin2asc proc
add al, 30h
cmp al, 39h
jbe bin2asc_1
add al, 7
bin2asc_1:
ret
bin2asc endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -