0
我正在爲我正在開發的M68k計算機編寫一個小操作系統,並且遇到了一個小問題。我需要能夠向用戶顯示十進制(31)十六進制值(比如$ 1F)我已經寫了下面的代碼這樣做,但它有幾個問題:m68k十六進制到十進制不能正常工作
ConvertHexByteToDecimal:
move sr, -(sp) ; Back up status register to stack.
move #$2700, sr ; Disable interrupts.
move.b d2, -(sp) ; Back up d2 to the stack.
and.b #$0F, d2 ; Get rid of the high nybble
cmp.b #$9, d2 ; Is the low nybble in the range of 0-9?
bgt.s @convertHex ; If not, branch.
move.b (sp)+, d3 ; Restore the 10's place from the stack
and.b #$F0, d3 ; Get rid of the low nybble
add.b d3, d2 ; Add the 10's place.
bra.s @done ; If so, branch.
@convertHex:
sub.b #$A, d2 ; Subtract $A from the hexadecimal meeper.
move.b (sp)+, d3 ; Restore the 10's place from the stack
and.b #$F0, d3 ; Get rid of the low nybble
add.b #$10, d3 ; Add 1 to the 10's place.
add.b d3, d2 ; Add the 10's place to the number.
@done:
move.b d2, d1 ; Copy to output register.
move (sp)+, sr ; Restore status register.
rts ; Return to sub.
代碼可以很好地處理高達$ F的值。例如,如果我輸入$ B,它會輸出11.但是,一旦數字超過$ F,它就開始被破壞。如果我輸入$ 10,則輸出10個,依此類推。它總是在$ xF後迴繞。
有沒有人有任何想法,爲什麼它這樣做?
代碼不會嘗試實際轉換爲十進制,如果原始值在10..15模式16範圍內,它只會添加6.它從不輸出任何內容,只是將修改後的值返回到寄存器中。你爲什麼期望這實際上有用? – 2011-12-21 04:29:21