📄 imageacutesub.s.bak
字号:
AREA |.text|, CODE, READONLY
EXPORT ImageSmoothSub
ad RN 0 ;ad=BASE++,ad初始值为BASE
w RN 1 ;图像宽度,此处为210
h RN 2 ;图像高度,此处为280
row RN 3 ;定义像素的坐标为(row,col),此处row和col是变量
col RN 4 ;
lum_0 RN 5 ;两个lum寄存器用来缓存灰度值,空闲时可作他用
lum_1 RN 6
dest RN 11 ;目标地址寄存器
ImageAcuteSub
STMFD sp!, {r4-r12, lr} ;ATPCS标准
MOV col, #0
MOV row, #0
SUB r8, w, #1 ;保存最大的列号
SUB r9, h, #1 ;保存最大的行号
MOV r11, #0x20000 ;保存新图像存储地址
MOV r12, r0 ;保存基地址
MUL r7, w, h ;保存图像的大小
ADD r7, r7, r12 ;内存空间中图像末地址
loop
CMP col, w ;更新当前像素的行号,列号
SUBGE col, col, w
ADDGE row, row, #1
CMP row, #0 ;比较行号是否为0
BEQ load
CMP row, r9 ;比较行号是否为279(取决于图像尺寸)
BEQ load
CMP col, #0 ;比较列号是否为0
BEQ load
CMP col, r8 ;比较列号是否为209
BEQ load ;BEQ均跳转到load处,对灰度值不作处理
;对有效区域内的像素做处理
LDRB lum_0, [ad, #-1]
LDRB lum_1, [ad, #1]
ADD lum_0, lum_0, lum_1 ;此处lum_0保存左右两个灰度值之和
SUB r10, ad, w
LDRB lum_1, [r10]
ADD lum_0, lum_0, lum_1 ;继续累加上方像素灰度值
ADD r10, ad, w
LDRB lum_1, [r10]
ADD lum_0, lum_0, lum_1 ;到此为止lum_0保存上下左右4个灰度值之和
LDRB lum_1, [ad] ;载入当前像素灰度值
SUB lum_0, lum_0, lum_1 LSL #2 ;四周像素灰度之和-当前像素灰度四倍
SUBS lum_1, lum_1, lum_0 LRL #2 ;此处锐化的参数取0.25
;限制灰度值范围0-255
MOVLT lum_1, #0
CMP lum_1, #255
MOVGT lum_1, #255
B next
load
LDRB lum_1, [ad, #1]
next
STRB lum_1, [dest], #1
ADD col, col, #1
CMP ad, r7 ;是否到文件尾
ADD ad, ad, #1
BLT loop
LDMFD sp!, {r4-r12, pc}
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -