作者MasterChang (我爱ASM)
看板ASM
标题Re: [问题] 关於超过8bits的除法
时间Fri Dec 31 10:29:10 2010
※ 引述《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
1F:推 hiddencat:我不太懂一开始的第一个指令MACRO是什麽意思 12/31 11:02
2F:→ hiddencat:我上网查了一下, 似乎叫做聚集指令?, 不过还是不太清楚 12/31 11:07
3F:→ hiddencat:用法 12/31 11:07
4F:→ hiddencat:还有 CALL指的是LCALL还是ACALL? 还是有其他意思@@? 12/31 11:11
5F:推 WolfLord:你爱怎麽CALL就怎麽CALL 重点是你有没有看懂原理 12/31 14:05
6F:推 ruemann:巨集啦……只是为了节省时间或阅读方便,用来做字串取代的 12/31 17:12