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

📄 testdct.s

📁 对raw图像的dct算法的汇编语言实现过程
💻 S
字号:
		AREA testDCT, CODE, READONLY
	
dim		EQU		64		;each 4 numbers caught
numA	EQU		63
count	EQU		4
checkA	EQU		255


		ENTRY
		
start
		
		
		MOV r0, #dim
		;MOV r3, #0x5000  ;store the .raw's start address in r3
		LDR r3, =paceFifth
		;MOV r4, #0x3000  ;store the cos.raw
		LDR r4, =paceThird
		B loop1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;下面是第一次循环块;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop1
  		SUB r0, r0, #1 
		CMP r0, #0
		MOV r1, #dim
  		BNE loop2
  		BEQ secPart
  		
loop2
		SUB r1, r1, #1
		
		;;63-r0=row
		;;63-r1=col
		MOV r5, #numA
		SUB r6, r5, r0		;行号
		SUB r7, r5, r1		;列号
		
		;cm[][]
		ADD r8, r4, r6, lsl #6	;r8存行地址	
		;dataPicture
		ADD r9, r3, r7    		;r9是列地址
;;;;;;;;;;;;;;;;;;;;;;;;;

		MOV r10, #dim
		MOV r11, #0
loop3	
		SUB r10, r10, #1
		CMP r10, #0
		
		MOV r5, #numA
		SUB r5, r5, r10
		ADD r5, r5, r8
		LDRSB r6, [r5]			;R6是行第n个值 n=行地址+r10对应的地方
		
		MOV r5, #numA
		SUB r5, r5, r10
		MOV r5, r5, lsl #6  	;r5=r5*64
		ADD r5, r5, r9
		LDRB r7, [r5]			;r7是列上第n个值 n=列地址+r10对应第几个
		
		MUL r12, r7, r6
		ADD r11, r11, r12		;r11是一行乘一列的结果
		

		BNE loop3
		 

		MOV r5, #numA
		SUB r6, r5, r0		;行号
		SUB r7, r5, r1		;列号
		MOV r6, r6,lsl #6
		ADD r6, r6, r7
		
	
		MOV r5, #count
		mul r6, r6, r5
		
		;MOV r5, #0x6000
		LDR r5,=halfA
		
		ADD r5, r5, r6
		;MOV r11, r11, ASR #7
		STR r11, [r5]			;存最终值  从地址0x6000开始  每32位存一个数*********这个r5地址不对
		
		CMP r1, #0
		BNE loop2
		BEQ loop1
		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;下面是第二次循环块;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
secPart
		MOV r0, #dim
		;MOV r3, #0x6000
		LDR r3,=halfA
		B sloop1
		
sloop1
		SUB r0, r0, #1 
		CMP r0, #0
		MOV r1, #dim
  		BNE sloop2
  		BEQ stop

sloop2
		SUB r1, r1, #1
		
		;;63-r0=row
		;;63-r1=col
		MOV r5, #numA
		SUB r6, r5, r0		;行号, 0x6000的行号
		SUB r7, r5, r1		;列号, 0x3000的行号
		
		;0x6000-4 
		ADD r8, r3, r6, lsl #8	;r8存行地址	 0x6000里面对应行的首地址
		ADD r9, r4, r7, lsl #6			;r9存地址   0x3000里面对应的
		;;;;;;;;;;;;begin loop 64
		MOV r10, #dim
		MOV r11, #0
		
		
sloop3	
		MOV r5, #dim
		SUB r5, r5, r10	
		
		SUB r10, r10, #1
		CMP r10, #0
		
				
		MOV r12, #count
		MUL r12, r5, r12
		ADD r12, r12, r8
		LDR r6, [r12]			;r6存原来r11放的那个矩阵块中的值
		
	
		;ADD r9, r5, r9
		LDRSB r7, [r9]   		;cm
		ADD r9, r9, #1
		
		
		MUL r12, r7, r6
		ADD r11, r11, r12
		
		BNE sloop3
		
		MOV r11, r11, ASR #14		;r11存最终值,判断大小后存进内存区域
		
		
		MOV r12, r11
		SUBS r12, r12, #0
		MOVLT r11, #0
		
		MOV r12, r11
		SUBS r12,r12, #0xff
		MOVGT r11, #0xff
		
		
		MOV r5, #numA
		SUB r6, r5, r0		;行号, 
		SUB r7, r5, r1		;列号,
		MOV r6, r6,lsl #6
		ADD r6, r6, r7
		;MOV r5, #0x4000
		LDR r5, =paceFou
		ADD r5, r5, r6
		STRB r11, [r5]
		
		
;;;;;;;;;;

		CMP r1, #0
		BNE sloop2
		BEQ sloop1


stop
		
	AREA data, DATA, READWRITE
halfA		SPACE		16384
paceThird	SPACE		4096
paceFou		SPACE		4096
paceFifth	SPACE		4096
		END

⌨️ 快捷键说明

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