匯編語言進制轉(zhuǎn)換之16進制轉(zhuǎn)10進制
使用8086匯編,輸入一個16進制的數(shù),程序把該16進制數(shù)轉(zhuǎn)換為相應(yīng)的10進制數(shù)輸出
程序運行截圖:
要實現(xiàn)這樣一個程序,思路可以是這樣的:
1.由于我們讀入的鍵盤輸入是ASCII碼表示的,且輸入一個字符便得到一個ASCII碼,如輸入ab,程序中可以得到61h和62h?,F(xiàn)在的問題是怎么把這些輸入的字符表示成一個完整的數(shù)。對于這個問題,我們可以把每次輸入的字符的ASCII碼先轉(zhuǎn)換為對應(yīng)的數(shù),0-9之間的數(shù),根據(jù)ASCII碼表發(fā)現(xiàn)可以用 ASCII碼減30h 得到0-9對應(yīng)的十六進制數(shù)值,對于a-b,用ASCII碼減57h 得到a-b對應(yīng)的十六進制數(shù)值。
2.得到這些對應(yīng)的數(shù)值之后,要把它們按輸入順序組合起來,這里可以用移位運算來組合,如根據(jù)輸入轉(zhuǎn)換得 1、2兩個十六進制數(shù)值,1的二進制表示為0001,2的二進制表示為0010,把0001左移4位得到00010000,加上0010,得到0001010,00010010表示的便是12h。
3.把輸入轉(zhuǎn)換為數(shù)值之后就準備要輸出了,可采用除10法得到各個位上的數(shù),如要輸出110,先要把110轉(zhuǎn)為 1、1、0 再把對應(yīng)的數(shù)值加上30h轉(zhuǎn)為ASCII碼后輸出,把110轉(zhuǎn)換為 1、1、0,110除以10商為11,余數(shù)為0,此時余數(shù)作為個位上的數(shù),得到個位為0;再用上一步的商11作為被除數(shù)除以10,得到商為10,余數(shù)為1,此時余數(shù)作為十位上的數(shù),得到十位為1;重復(fù)上述步驟,商1作為被除數(shù)除以10,商0余1,得到百位為1,此時商等于0,算法結(jié)束。
DATAS SEGMENT bin dw 10 dup(?) ;存放二進制結(jié)果 buf db 5 dup(?) ;存放十進制數(shù) 各個數(shù)位上的數(shù)值 如100,存放為 1,0,0 msg1 db 'please input a hex number',13,10,'$' msg2 db 'the dec number:',13,10,'$' crlf db 13,10,'$' ;回車換行 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX mov bx,0 ;初始化bx LEA dx,msg1 ;輸出提示字符串 mov ah,9 int 21h input: mov ah,1 ;輸入一個字符 int 21h sub al,30h ;把al中的ascii碼轉(zhuǎn)換成數(shù)值 jl init cmp al,10 ;輸入的數(shù)在0-9之間跳轉(zhuǎn) jl toBin sub al,27h ;再轉(zhuǎn)換為a-f cmp al,0ah ;輸入的字符比a小 jl init ;結(jié)束輸入 cmp al,10h ;輸入的字符比f大 jge init ;結(jié)束輸入 toBin: ;轉(zhuǎn)換為二進制,把輸入組合成意義上的數(shù)值 mov cl,4 shl bx,cl ;bx左移4位 mov ah,0 add bx,ax ;把輸入后并從ascii碼轉(zhuǎn)換來的值與bx相加 mov bin,bx ;轉(zhuǎn)換成二進制數(shù)后存到內(nèi)存bin jmp input ;繼續(xù)輸入 init: ;初始化,準備轉(zhuǎn)換 mov ax,bin mov bx,10 mov si,4 ;循環(huán)四次,最大到萬位 toDec: ;轉(zhuǎn)為各個數(shù)位上的數(shù)值,如100轉(zhuǎn)換為1,0,0 百位為1... mov dx,0 div bx ;除10法得到各個位上的數(shù)值 mov [buf+si],dl ;余數(shù)為該位上的值,第一次循環(huán)為個位,第二次為十位...;存到內(nèi)存中 dec si cmp ax,0 ;商是否為0,為0算法結(jié)束 ja toDec lea dx,crlf ;顯示提示 mov ah,9 int 21h lea dx,msg2 mov ah,9 int 21h output: ;輸出內(nèi)存中存放的各個數(shù)位上的數(shù)值 inc si mov dl,[buf+si] add dl,30h ;轉(zhuǎn)為ascii mov ah,2 int 21h cmp si,4 jb output mov ah,1 int 21h MOV AH,4CH INT 21H CODES ENDS END START
到此這篇關(guān)于匯編語言進制轉(zhuǎn)換之16進制轉(zhuǎn)10進制的文章就介紹到這了,更多相關(guān)匯編 16進制轉(zhuǎn)10進制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
8086匯編開發(fā)環(huán)境搭建和Debug模式介紹(圖文詳解)
這篇文章主要介紹了8086匯編開發(fā)環(huán)境搭建和Debug模式介紹,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦)
這篇文章主要介紹了匯編語言有關(guān)在屏幕區(qū)顯示字符的四種方法(推薦),每種方法給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02