2012-07-25 71 views
3

我的目標是顯示用戶以十六進制輸入的兩個數字的解決方案。截至目前,我的代碼從用戶處獲得2個數字,然後以十進制形式返回解決方案。我認爲我應該做的只是獲得我的小數解決方案,並將其轉換爲十六進制數字後加在一起。如果有另一種合理的方式,請讓我知道。謝謝。將我的解決方案從十進制轉換爲十六進制

org $8000 
START movea.l #MSG1, A1 
    move.b #13,D0 
    trap #15   
    clr.w D2 
    JSR Loop 

    move.w d2, d4 
    movea.l #msg2, a1 
    move.b #13,D0 
    trap #15  
    clr.w d2 
    jsr loop 

    movea.l #msg3, A1 
    move.b #13,D0 
    trap #15 
    add.w d4, d2 
    JSR DISP 

    MOVE.B #9,D0 
    TRAP #15  
LOOP move.b #5,D0 
    trap #15 
    cmp.b #$0D, D1 
    BEQ BREAK 
    and.b #$0F, d1 
    mulu #10, d2 
    add.w d1, d2 
    jmp loop 
Break rts 
DISP clr.b d3 
DISDIV divu #10, D2 
    move.b #16, d5 
    ror.l d5, d2 
    or.b #$30, d2 
    move.b d2, -(A7) 
    addq #1, d3 
    clr.w d2 
    ror.l d5, d2 
    bne DISDIV 
DISDIG move.b (a7)+, D1 
    move.b #6,D0 
    trap #15  ; char out 
    subq.b #1, D3 
    bne DISDIG 
    rts 
    org $8100 
MSG1 DC.B 'Please enter a two digit number ', 0 
MSG2 DC.B 'Please enter another two digit number ', 0 
MSG3 DC.B 'The sum of the two 2 digit numbers you entered is ', 0 
    end  start 

我正在使用EASY68k彙編程序。

+1

哇,我的天堂年齡不見68K的彙編器。這總是我最喜歡的。 – 2012-07-25 02:26:04

+0

哈哈,是啊,我其實並沒有知道什麼網站發佈這個問題。 – 2012-07-26 01:47:02

回答

3

你需要改變輸入和輸出的代碼。

輸入碼與$0f進行AND操作,當字符爲0-9時有效,但當字符爲a-f時不起作用。您需要測試角色,並對a-f情況進行不同的處理。然後,您需要將之前的結果乘以16而不是10.

您在輸出時出現相反的問題。將divu從10更改爲16會讓你在一半的位置,但如果你添加30美元轉換爲ASCII 0 - 9,則需要測試該值並添加$ 41,而不是10至15之間。

+0

我注意到了那個標記,而且我正在研究它。你給了我一個很好的大綱,說明我需要做什麼,所以我現在就去試試看。 – 2012-07-25 03:27:07

1

只要改變

DISDIV divu #10, D2 

DISDIV divu #16, D2 
+0

謝謝很多人 – 2012-07-25 02:24:50

+0

@TheObliviator,不是很快 - 這個答案是不完整的。你甚至測試過它嗎? – 2012-07-25 02:25:39

相關問題