anita 發問時間: 電腦與網際網路軟體 · 1 0 年前

Booth's Algorithms(布斯演算法)的程式寫法

我搜尋過網路上相關的文章,不過都是英文的!看起來挺辛苦的,我要利用8051寫出一個16位元*16位元的副程式,可有好心的大大幫一下忙?

已更新項目:

可以簡單的說明一下嗎?拜託盡量用中文註解好嗎?謝謝!

1 個解答

評分
  • Egar
    Lv 5
    1 0 年前
    最佳解答

    我是以主程式的方式寫的,你參考看看!MULCND0  EQU  30HMULCND1  EQU  31HMULER0   EQU  32HMULER1   EQU  33HRESULT0  EQU  34HRESULT1  EQU  35HRESULT2  EQU  36HRESULT3  EQU  37HAUX0     EQU  38HAUX1     EQU  39HAUX2     EQU  3AHAUX3     EQU  3BHPREBIT   REG  20H.0NOWBIT   REG  20H.1    ORG  00H;INITIAL THE RESULT    MOV  A,#0    MOV  RESULT0,A    MOV  RESULT1,A    MOV  RESULT2,A    MOV  RESULT3,A    ;LOAD THE MULTIPLICAND & MULTIPLIER    MOV  DPTR,#VALUE    MOVC A,@A+DPTR    MOV  MULCND0,A    MOV  A,#1    MOVC A,@A+DPTR    MOV  MULCND1,A    MOV  A,#2     MOVC A,@A+DPTR    MOV  MULER0,A    MOV  A,#3    MOVC A,@A+DPTR    MOV  MULER1,A;CHECK MULTIPLICAND    MOV  A,MULCND1    CLR  C    RLC  A    JC   NAG    MOV  A,#0    MOV  AUX3,A    MOV  AUX2,A    JMP  CHKOKNAG:    MOV  A,#0FFH    MOV  AUX3,A    MOV  AUX2,ACHKOK:    MOV  AUX1,MULCND1    MOV  AUX0,MULCND0;START THE BOOTH ALGORITHMS    CLR  C    CLR  PREBIT    CLR  NOWBIT    MOV  R0,#16LOOP:         MOV  PREBIT,NOWBIT     CLR  C      MOV  A,MULER1    RRC  A    MOV  MULER1,A    MOV  A,MULER0    RRC  A    MOV  MULER0,A;CHECK PAIR    JC   LPA    CLR  NOWBIT    JNB  PREBIT,SSL  ;[00]PAIR DO NOTHING;[01]PAIR CALL ADD_AUX    CALL ADD_AUX    JMP  SSLLPA:    SETB NOWBIT    JB   PREBIT,SSL  ;[11]PAIR DO NOTHING;[10]PAIR CALL SUB_AUX    CALL SUB_AUX    JMP  SSL;THE MULTIPLICAND SHIFT LEFTSSL:    CLR  C    MOV  A,AUX0    RLC  A    MOV  AUX0,A    MOV  A,AUX1    RLC  A    MOV  AUX1,A    MOV  A,AUX2    RLC  A    MOV  AUX2,A    MOV  A,AUX3    RLC  A    MOV  AUX3,A  ;THE PROCEDURE HAVE BEEN DONE?    DJNZ R0,LOOP    JMP  ENDDING

    2006-07-08 04:30:14 補充:

    字數限制的關係,其餘部分放在意見欄!

    2006-07-08 04:30:37 補充:

    ;[01]PAIR ADD THE MULTIPLICAND TO RESULT

    ADD_AUX:

    CLR C

    MOV A,RESULT0

    ADDC A,AUX0

    MOV RESULT0,A

    MOV A,RESULT1

    ADDC A,AUX1

    MOV RESULT1,A

    MOV A,RESULT2

    ADDC A,AUX2

    MOV RESULT2,A

    MOV A,RESULT3

    ADDC A,AUX3

    MOV RESULT3,A

    RET

    2006-07-08 04:31:17 補充:

    ;[10]PAIR SUB THE MULTIPLICAND TO RESULT

    SUB_AUX:

    CLR C

    MOV A,RESULT0

    SUBB A,AUX0

    MOV RESULT0,A

    MOV A,RESULT1

    SUBB A,AUX1

    MOV RESULT1,A

    MOV A,RESULT2

    SUBB A,AUX2

    MOV RESULT2,A

    MOV A,RESULT3

    SUBB A,AUX3

    MOV RESULT3,A

    RET

    2006-07-08 04:34:20 補充:

    ;輸入的值(被乘數[低/高]/乘數[低高])

    VALUE:

    DB 9CH,FFH,63H,0H

    ENDDING:

    NOP

    END

    2006-07-09 11:51:58 補充:

    可以提供信箱嗎?我再把中文解說寄給你吧!

    2006-07-12 14:48:18 補充:

    這個指令MOV PREBIT,NOWBIT 空怕會有問題,請改正如下:

    MOV C,NOWBIT

    MOV PREBIT,C

    參考資料: me
    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。