就是想做一个32位被除数除以一个16位除数的小实验。
然后保留商和余数。
我刚学这些东西,对指令不太熟悉,所以现在写到这些就卡住了。。。。
其中AR1存放被除数,AR2存放除数,然后AR5和AR6存最后的余数和商。
.MMREGS
.GLOBAL _MAIN
.TEXT
_MAIN:
.GLOBAL _MAIN
.TEXT
_MAIN:
XOR A
XOR B
STM #0100H,AR1
STM #0106H,AR2
STM #0110H,AR3
STM #0120H,AR4
STM #0130H,AR5
STM #0132H,AR6
LD *AR1+,A
MPYA *AR2
NOP
ABS A
RPT #15
SUBC *AR2,A
STH A,*AR4
STL A,*AR3
XOR A
ADD *AR4,16,A
ADD *AR1,A
RPT #15
SUBC *AR2,A
XC 1,BLT
NEG A
STH A,*AR5
STL A,*AR6+
NOP
B $
XOR B
STM #0100H,AR1
STM #0106H,AR2
STM #0110H,AR3
STM #0120H,AR4
STM #0130H,AR5
STM #0132H,AR6
LD *AR1+,A
MPYA *AR2
NOP
ABS A
RPT #15
SUBC *AR2,A
STH A,*AR4
STL A,*AR3
XOR A
ADD *AR4,16,A
ADD *AR1,A
RPT #15
SUBC *AR2,A
XC 1,BLT
NEG A
STH A,*AR5
STL A,*AR6+
NOP
B $
在添加MPYA和下面的XC以及NEG这三条指令之前,正数的除法还是能简单做一下的。但还是有很多问题,就像被除数最高位不能是1的问题。
所以~~请教一下
Shine:
rts库支持除法,直接用c语言写就可以了。
Xianhao Bai:
回复 Shine:
谢谢您,但是我们现在课程设计要求用这个ASM,所以如果用ASM的话,您知道怎么修改一下吗
Shine:
回复 Xianhao Bai:
可以参考rts.lib里的除法源码C:\ti\ccsv6\tools\compiler\c5500_4.4.1\lib\rtssrc.zip