输入四位十六进制的数值,将十六进制数值转二进制输出
程序运行:
代码:
datas segmentmaxLength db 5hexLength db 0hex db 5 dup(?)bin db 100h dup(?)inputPrompt db 'input 4 bit hexadecimal:$'outputBinary db 0dh,0ah,'output binary:$'outputInputError db 0dh,0ah,'input error!$'datas endsstacks segment stackdb 100h dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks
main proc far
start:push dsmov ax,0hpush axmov ax,datas ;初始化dsmov ds,axlea dx,inputPrompt ;输入提示mov ah,9int 21hlea dx,maxLength ;输入十六进制字符mov ah,10int 21hmov cl,hexLength ;若字符串长度不为4,则输入错误cmp cl,4jne inputErrormov ch,0 ;设置ch,使得cx为字符串的长度lea si,hex lea di,bins:mov al,[si] cmp al,'9' ;判断字符是否大于'9'ja english ;大于9则跳转去判断是否为其他十六进制字符cmp al,'0' ;判断字符是否大于'0' jb inputError ;若小于'0',则输出jmp tobinary ;否则,则转换为二进制english:or al,32 ;将字符变成小写字母,不是小写字母的运算结果不变cmp al,'a' ;判断字符是否大于'a'jb inputError ;若小于'a',则输入错误cmp al,'f' ;判断字符是否大于'f'ja inputError ;若大于'f',则输入错误 sub al,7 ;先减7,变成数字的值+30htobinary:sub al,30h ;减去30h,剩下数值call binary ;转换二进制,使用al,diinc si ;数组下标加一loop slea dx,outputBinary ;输出二进制提示mov ah,9int 21hmov byte ptr [di],'$' ;设置二进制字符串的结束字符lea dx,bin ;输出二进制字符串mov ah,9int 21hjmp exitinputError: ;输入错误提示lea dx,outputInputErrormov ah,9int 21h exit:retmain endpbinary proc nearpush cx ;保存cxmov cl,4 ;将al左移4位,使al的高半字节为原来al的低半字节shl al,clmov cx,4sbin:shl al,1 ;左移一位jc one ;进位为1,跳转到onemov byte ptr [di],'0' ;否则,二进制数组置'0'jmp restart ;跳转到restartone: ;置'1'mov byte ptr [di],'1'restart:add di,1loop sbinpop cx ;恢复cxretbinary endp
codes endsend main