本文主要是介绍汇编语言——输入4位以内的16进制数,存进BX,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
data segment
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ds:data,ss:stack
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,topmov bx,0mov cx,4 ;最多输入4位16进制数
L1: mov ah,7 ;用7号功能输入,不回显int 21hcmp al,0dh ;回车,跳转到输出bx,如果没有输入就回车,bx=0je exitcmp al,30h ;输入的字符小于30h,重新输入jb L1cmp al,39h ;输入的字符大于39h,到L2继续判断合法性ja L2mov dl,al ;0-9合法输入,回显mov ah,2int 21hsub dl,30h ;输入的0-9要减30h才能变成ASCII码0-9push cx ;保护cxmov cl,4rol bx,cl ;bx左移4位add bl,dl ;bx低八位bl加上dlpop cx ;还原cxdec cxcmp cx,0 ;cx=0跳转到输出bx,否则继续输入je exit jmp L1L2:cmp al,41h ;输入的字符小于41h(A),重新输入jb L1cmp al,46h ;输入的字符大于46h(F),到L3继续判断合法性ja L3mov dl,al ;A-F合法输入,回显mov ah,2int 21hsub dl,37h ;输入的A-F要减37h才能变成ASCII码10-15push cxmov cl,4shl bx,cladd bl,dlpop cxdec cxcmp cx,0 ;cx=0跳转到输出bx,否则继续输入je exitjmp L1L3:cmp al,61h ;输入的字符小于61h(a),重新输入jb L1cmp al,66h ;输入的字符大于66h(f),重新输入ja L1mov dl,al ;a-f合法输入,回显mov ah,2int 21hsub dl,57h ;输入的a-f要减57h才能变成ASCII码10-15push cxmov cl,4shl bx,cladd bl,dlpop cxdec cxcmp cx,0 ;cx=0跳转到输出bx,否则继续输入je exitjmp L1;以16进制输出bx
exit:;回车换行mov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hmov cx,4 ;输出4位16进制数L4:push cxmov cl,4rol bx,clmov dl,bland dl,0fh ;屏蔽高4位 cmp dl,9ja L5add dl,30h ;0-9jmp printL5:add dl,37h ;A-Fprint:mov ah,2int 21hpop cxloop L4mov ah,4chint 21hmain endp
code endsend main
这篇关于汇编语言——输入4位以内的16进制数,存进BX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!