;汇编一点点提高3——键盘输入8位二进制数,存入NUM单元,并在屏幕上显示对应的16进制数
此程序要注意一下几点:
1.dos1号功能——带回显的键盘输入,自动存入al
2.dos7号功能——不带回显的键盘输入,自动存入al,若要在屏幕中显示要调用DOS2号功能
3.将输入的多个二进制数转换为ASCII码
input:
mov ah,1
int 21h
add bl,bl
cmp al,'1'
jnz P1
inc bl
P1: dec ch
jnz input
4.换行子程序:
newline:
mov ah,2
mov dl,13
int 21h
mov ah,2
mov dl,10
int 21h
DATAS SEGMENT ;此处输入数据段代码 NUM db ? mess db 'RESULT=$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 mov bl,0 mov ch,8 input: ; 输入8个二进制数 mov ah,1 int 21h add bl,bl ;转换为ASCII码 cmp al,'1' jnz P1 inc bl P1: dec ch jnz input mov NUM,bl mov dl,42h;输出字符B mov ah,2 int 21h newline: ;换行 mov ah,2 mov dl,13 int 21h mov ah,2 mov dl,10 int 21h mov ah,9 ;输出RESULT= mov dx,seg mess mov ds,dx mov dx,offset mess int 21h mov bl,NUM mov ch,2 again: mov cl,4 rol bl,cl ;循环左移转换为十六进制数 mov dl,bl and dl,0fh add dl,30h cmp dl,3ah jb show add dl,7h show: ;显示出来 mov ah,2 int 21h dec ch jnz again mov dl,48h ;输出H mov ah,2 int 21h MOV AH,4CH INT 21H CODES ENDS END START