用匯編 十進制轉十六進制 解釋一個decibin過程

源地址:http://wenwen.sogou.com/z/q519260810.htm

源程序(ibm-pc 彙編課本中):

decibin proc near
mov bx,0 
newchar: mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx 
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit: ret
decibin endp

標註:

(注:每次僅從dos中得到一個ascii字符,無論輸入幾位數,所以要循環處理各個位)

decibin proc near
mov bx,0 
newchar: mov ah,1 ;調用1號功能輸入
int 21h 
sub al,30h ;轉換爲ASCll碼
jl exit ;跟0比較~小於跳轉
cmp al,9d ;跟9比較~大於跳轉
jg exit 
cbw ;字節型擴展爲字型
xchg ax,bx ;ax與bx互換 // (因爲要對輸入的數進行多次處理,所以爲了先對上一次處理的結果*10d,以bx作爲一個暫存器存放當前要處理數

mov cx,10d ;cx賦值10
mul cx ;ax乘以cx
xchg ax,bx ;ax與bx互換 //(本次處理完後,將結果存於bx中,以處理下一個字符時ax被替換

add bx,ax ;bx+ax
jmp newchar ;循環
exit: ret
decibin endp
算法是這樣的:
假設要輸入數字19
先輸入一個1~al中的值是31h
然後減去30h~al=1
cbw ax中的值爲1 bx中的值爲0
xchg ax中的值爲0 bx中的值爲1
mul ax中的值爲0
xchg ax中的值爲1 bx=0
add bx=1
循環 ~第二次輸入9
al=39h
sub al=9
cbw ax=9
xchg ax=1 bx=9
mul ax=10
xchg bx=9 ax=10
add bx=19
繼續輸入仍然是這個流程~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章