汇编语言(九)之十六进制数值转二进制
生活随笔
收集整理的這篇文章主要介紹了
汇编语言(九)之十六进制数值转二进制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
輸入四位十六進制的數值,將十六進制數值轉二進制輸出
程序運行:
?
代碼:
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?
總結
以上是生活随笔為你收集整理的汇编语言(九)之十六进制数值转二进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言(八)之删除数组中为零的元素
- 下一篇: 汇编语言(十)之最小偶数