⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm_dct.s

📁 ADS下的图像DCT变换算法实现 运行于ARM920T
💻 S
字号:
	AREA DCT_DATA,DATA,READWRITE	
origin_array SPACE 4096               ;存放原始矩阵
xishu_array SPACE 4096                ;存放系数矩阵
xishu_array_t SPACE 4096              ;存放系数矩阵的转置
middle_array SPACE 16384               ;存放系数矩阵和原始矩阵的乘积结果
result_array SPACE 16384               
final_array SPACE 4096					;存放最终的结果

	AREA DCT_CODE,CODE,READONLY
	ENTRY
start
	
	;矩阵的转置
	LDR R0,=xishu_array                 ;系数矩阵的首地址
	LDR R1,=xishu_array_t               ;转置矩阵的首地址
	
	MOV R3,#0   ;x
loopx
	MOV R4,#0   ;y
loopy
	MOV R5,R4,LSL #6
	ADD R6,R5,R3
	LDRSB R7,[R0,R6]
	
	MOV R8,R3,LSL #6
	ADD R9,R8,R4
	STRB R7,[R1,R9]
	
	ADD R4,R4,#1
	CMP R4,#64
	BNE loopy
	
	ADD R3,R3,#1
	CMP R3,#64
	BNE loopx	
	
	
	
	
	
	
	;系数矩阵与源矩阵相乘
	
	LDR R0,=xishu_array
	LDR R1,=origin_array
	LDR R2,=middle_array
	
	MOV R3,#0        ;i
row1
	MOV R4,#0        ;l
colum1
	MOV R11,#0        ;保存结果矩阵的每个元素值
	MOV R5,#0        ;j
	
mul1
	MOV R6,R3,LSL #6         ;保存第一个数组的元素
	ADD R6,R6,R5
	LDRSB R7,[R0,R6]           
	
	MOV R8,R5,LSL #6         ;保存第二个数组的元素
	ADD R8,R8,R4
	LDRB R9,[R1,R8]           
	
	MUL R10,R7,R9             ;每个元素相乘,保存到R9中
	ADD R11,R11,R10
	
	ADD R5,R5,#1
	CMP R5,#64
	BNE mul1
	STR R11,[R2],#4       ;保存求得第一个元素值
	
	ADD R4,R4,#1
	CMP R4,#64
	BNE colum1
	
	ADD R3,R3,#1
	CMP R3,#64
	BNE row1
	
	
	
	
	;中间结果矩阵与系数转置矩阵相乘
	
	LDR R0,=middle_array
	LDR R1,=xishu_array_t
	LDR R2,=result_array
	
	MOV R3,#0        ;i
row2
	MOV R4,#0        ;l
colum2
	MOV R11,#0        ;保存结果矩阵的每个元素值
	MOV R5,#0        ;j
	
mul2
	MOV R6,R3,LSL #6         ;保存第一个数组的元素
	ADD R6,R6,R5
	LDR R7,[R0,R6,LSL #2]           
	
	MOV R8,R5,LSL #6         ;保存第二个数组的元素
	ADD R8,R8,R4
	LDRSB R9,[R1,R8]           
	
	MUL R10,R7,R9             ;每个元素相乘,保存到R9中
	ADD R11,R11,R10
	
	ADD R5,R5,#1
	CMP R5,#64
	BNE mul2
	
	STR R11,[R2],#4       ;保存求得第一个元素值
	
	ADD R4,R4,#1
	CMP R4,#64
	BNE colum2
	
	ADD R3,R3,#1
	CMP R3,#64
	BNE row2
	
	
	LDR R0,=result_array
	LDR R1,=final_array
	
	MOV R10,#0   ;计数器
	MOV R9,#0
	MOV R8,#255
begin
	
	LDR R2,[R0],#4
	MOV R3,R2,ASR #14
	
	CMP R3,R9
	BLT loop1
	
	CMP R3,R8
	BGT loop2
	STRB R3,[R1],#1
	B result
	
loop1
	STRB R9,[R1],#1
	B result	
	
loop2
	STRB R8,[R1],#1
	B result	
	
result
	ADD R10,R10,#1
	CMP R10,#4096
	BNE begin
	
	
stop

	MOV r0,#0x18                      ; angel_SWIreason_ReportException
    LDR r1,=0x20026                   ; ADP_Stopped_ApplicationExit
    SWI 0x123456                      ; ARM semihosting SWI

	END
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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