程式執行效果如下:
如題,此程式只能實現一位十六進製制數的轉換
具體**如下
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 餘數的逆序...