彙編學習 一位十六進製制數轉換為十進位制數

2021-10-04 01:14:57 字數 1861 閱讀 7741

程式執行效果如下:

如題,此程式只能實現一位十六進製制數的轉換

具體**如下

datas segment

buf db 5 dup(?)

msg1 db 'please input a hex

number',13,10,'$' ;設定提示

msg2 db 'the dec

number:',13,10,'$'

ctlf db 13,10,'$'

datas ends

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

lea dx,msg1 ;輸出第一條提示

mov ah,9

int 21h

mov ah,1 ;輸入乙個十六進製制數

int 21h

sub al,30h ;得到真實數值

cmp al,0

jl todec ;判斷是否小於0,如果小於0,則跳轉到todec

cmp al,10

jl number ;判斷是否在0-9範圍內,如果是,則跳轉到number

sub al,27h

cmp al,0ah

jl finish ;判斷是否小於a,如果是,則跳轉到finish

cmp al,10h

jge finish ;判斷是否大於等於16,如果是,則跳轉到finish

jmp todec

;跳轉到todec

number:

lea dx,ctlf

mov ah,9

int 21h ;換行

lea dx,msg2

mov ah,9

int 21h ;輸出第二條提示

mov dl,al ;顯示數字

add dl,30h

mov ah,2

int 21h

jmp finish ;跳轉到finish

todec:

mov ah,0

mov bl,10

div bl ;除以10

mov [buf],ah

;將餘數存入ds:[buf]

mov [buf+1],al ;將商存入ds:[buf+1]

lea dx,ctlf

mov ah,9

int 21h

;換行 lea dx,msg2 ;輸出第二條提示

mov ah,9

int 21h

output:

mov dl,[buf+1] ;輸出商

add dl,30h

mov ah,2

int 21h

mov dl,[buf] ;輸出餘數

add dl,30h

mov ah,2

int 21h

finish:

mov ah,4ch ;程式結束,返回dos

int 21h

codes ends

end start

初學彙編,程式顯得臃腫繁瑣,如有錯誤,歡迎指正討論。

數字轉換為十六進製制數

給定乙個整數,編寫乙個演算法將這個數轉換為十六進製制數。對於負整數,我們通常使用 補碼運算 方法。注意 十六進製制中所有字母 a f 都必須是小寫。十六進製制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元 0 來表示 對於其他情況,十六進製制字串中的第乙個字元將不會是0字元。給定的數...

QByteArray轉換為十六進製制顯示

串列埠接受到的資料讀取出來是qbytearray,將它以十六進製制顯示在lineedit中。共有三種形式 形式一 顯示十六進製制的格式 收到字元 123 顯示為0x31,0x32,0x33 形式二 只顯示十六進製制的數字 收到字元 123 顯示為313233 形式三 顯示字元 收到字元 123 顯示...

十進位制數轉換為八進位制數 十六進製制數

十進位制轉換為其他進製有乙個基本公式 n n div d d n mod d 其中 div 是整除,mod 為求餘,n 是十進位制數,d 是要目標 進製 例如 1348 10 2504 8,運算過程如下 nn div 8 n mod 8 1348 1684 16821021 2520 2 餘數的逆序...