📄 testdct.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 + -