32位除以16位.txt

来自「一些很有用的VDHL程序设计例子」· 文本 代码 · 共 44 行

TXT
44
字号
//三十二位除十六位数据的除法
//R1存三十二位的低位   R2存放三十二位的高位 
//C语言调用,unsigned int DIV_32_16(unsigned long int Data1,unsigned int Data2)
//			 unsigned long int DIV_32_16(unsigned long int Data1,unsigned int Data2)
//
.RAM
.VAR IB_Div32_Counter
.CODE
.PUBLIC _DIV_32_16
_DIV_32_16:.PROC
	PUSH R3,R5 TO [SP]
	BP = SP
	BP += 0x08
	R3 = [BP]
	R4 = 16
	[IB_Div32_Counter] = R4
DIV_32_1:
	R4 = 0x0000
	R1 = R1 LSL 1						//R1寄存器循环左移一位
	R4 = R4 LSL 3
	R2 = R2 ROL 1
	R4 = R4 ROL 4
	test R4,0x0001
	JNZ DIV_32_3
	R2 = R2-R3
	JAE DIV_32_2						//JAE:无符数,大于或等于
	R2 = R2+R3
	R4 = [IB_Div32_Counter]
	R4-=1
	[IB_Div32_Counter] = R4
	JNZ DIV_32_1
	POP R3,R5 FROM [SP]
	RETF
DIV_32_3:
	R2 = R2-R3
DIV_32_2:
	R1+=1
	R4 = [IB_Div32_Counter]
	R4-=1
	[IB_Div32_Counter] = R4
	JNZ DIV_32_1
	POP R3,R5 FROM [SP]
	RETF
	.END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?