Re: [問題] 關於超過8bits的除法

看板ASM作者 (我愛ASM)時間13年前 (2010/12/31 10:29), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《hiddencat (=____=)》之銘言: : 在8051組合語言 : 除法提供的是 : DIV ab : 執行的是8 bits的數據 : 但我想請教一下 : 如果我想要將一個為超過8 bits的數 : 除以一個一樣是超過8 bits的數 : 取其餘數的部分 : 該如何做到? : 隨意舉例: : 590351/1234 = ? : 我現在能想到的是用迴圈來跑減法 : 相減之後判斷被除數是否已小於除數 : 如果是 : 留下的即為其餘數 : 不知道有沒有其他更好的辦法? 以前寫的32bits四則運算,參考看看。 8051 32 位元四則運算 說明:所有運算的工作空間使用BUF所定址的12個位元組(Byte) ;MACRO for Clear Internal Data Memory ;R0 : Start Address ;R2 : Memory Length CIDM MACRO Length MOV R2,#Length CLR A MOV @R0,A INC R0 DJNZ R2,CIDM ENDM ;;Clear 4 Internal Data Memory CIDM4: CIDM 4 RET ;Internal Data Compare ;If not equal,CY = 1 IDC: LOOP: MOV A,@R0 MOV B,@R0 CJNE A,B,ENDLOOP INC R0 INC R1 DJNZ R2,LOOP ENDLOOP: RET ;32bits ADD ;R0[3]R0[2]R0[1]R0[0]=R0[3]R0[2]R0[1]R0[0] + R1[3]R1[2]R1[1]R1[0] ADD32: MOV R2,#04H CLR C F1: MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,L1 RET ;32bits subtract ;R0[3]R0[2]R0[1]R0[0]=R0[3]R0[2]R0[1]R0[0] - R1[3]R1[2]R1[1]R1[0] SUB32: MOV R2,#04H CLR C F2: MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,L2 RET ;32bits Multipty ;BUF:12Bytes ;BUF[3]BUF[2]BUF[1]BUF[0] = BUF[3]BUF[2]BUF[1]BUF[0] x BUF[11]BUF[10]BUF[9]BUF[8] ;Work Area:BUF[7]BUF[6]BUF[5]BUF[4] ;Using reg R0,R1,R2,R3 MUL32: MOV R1,#(BUF+4) CALL CIDM4 MOV R3,#33 ;SHIFT COUNT CLR C F3: MOV R1,#(BUF+7) MOV R2,#(BUF+4) F4: MOV A,@R1 RRC A MOV @R1,A DEC R1 DJNZ R2,F4 JNC F5 CLR C MOV R0,#(BUF+4) CALL ADD32 F5: DJNZ R3,F3 RET ;32bits Divide ;BUF:12Bytes ;BUF[3]BUF[2]BUF[1]BUF[0] = BUF[3]BUF[2]BUF[1]BUF[0] / BUF[11]BUF[10]BUF[9]BUF[8] ;Work Area:BUF[7]BUF[6]BUF[5]BUF[4] ;Using reg R0,R1,R2,R3 DIV32: MOV R1,#(BUF+4) CALL CIDM MOV R3,#32 ;SHIFT COUNT CLR C F6: MOV R1,#BUF MOV R2,#(BUF+4) F7: MOV A,@R1 RLC A MOV @R1,A DJNZ R2,F7 MOV R0,#(BUF+7) MOV R1,#(BUF+11) MOV R2,#BUF CALL IDC JC F8 MOV R0,#(BUF+4) MOV R1,#(BUF+8) CALL SUB32 F8: CPL C DJNZ R3,F6 MOV R1,#BUF MOV R2,#BUF F9: MOV A,@R1 INC R1 DJNZ R2,F9 RET -- 不要問我從哪來,我只是一個浪跡天涯的工程師.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.48.86

12/31 11:02, , 1F
我不太懂一開始的第一個指令MACRO是什麼意思
12/31 11:02, 1F

12/31 11:07, , 2F
我上網查了一下, 似乎叫做聚集指令?, 不過還是不太清楚
12/31 11:07, 2F

12/31 11:07, , 3F
用法
12/31 11:07, 3F

12/31 11:11, , 4F
還有 CALL指的是LCALL還是ACALL? 還是有其他意思@@?
12/31 11:11, 4F

12/31 14:05, , 5F
你愛怎麼CALL就怎麼CALL 重點是你有沒有看懂原理
12/31 14:05, 5F

12/31 17:12, , 6F
巨集啦……只是為了節省時間或閱讀方便,用來做字串取代的
12/31 17:12, 6F
文章代碼(AID): #1D7J_xPQ (ASM)
文章代碼(AID): #1D7J_xPQ (ASM)