21,459
社区成员
发帖
与我相关
我的任务
分享
.include "../carte.inc"
test: .byte 0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00 @ 字母A 题目要求,不可更改
.global _start
_start:
main:
bl lcd_init @初始化LCD
adr r1,test @取数组地址
mov r2,#10 @初始横坐标
mov r4,#0
ldr r5,[r1]
ligne: @逐行
cmp r2,#18 @到8像素后结束
mov r3,#10 @初始纵坐标
beq finchar
colonne: @逐列
cmp r3,#18 @到8像素后结束
beq fin2
movs r5,r5,LSL #1 @问题其一
adc r6,r6,#0
cmp r6,#0 @问题其二
beq fin3
mov r0,r2 @此处开始为写坐标及填充LCD目标区域,范例程序,无问题
stmfd sp!,{r0}
mov r0,r3
stmfd sp!,{r0}
mov r0,r2
stmfd sp!,{r0}
mov r0,r3
stmfd sp!,{r0}
ldr r0,=0xFFF @白色填充
stmfd sp!,{r0}
bl fillrect @调用子程序填充像素
add sp,sp,#5<<2 @范例程序到此结束
fin3:
add r3,r3,#1 @列+1
b colonne
fin2:
ldr r5,[r1,r4,LSL #2]
add r4,r4,#1
add r2,r2,#1 @行+1
b ligne
finchar:
nop
.include "../carte.inc"
test: .byte 0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00 @ A
.global _start
_start:
main:
mov r13,#0x10000
lcd:
bl lcd_init
adr r1,test
mov r2,#10
mov r4,#24
mov r6,#0
mov r7,#0
ligne:
cmp r7,#4
bne find2bit
next4:
ldr r5,[r1],#4
mov r4,#24
mov r7,#0
find2bit:
ldr r5,[r1]
cmp r2,#18
beq finchar
mov r3,#10
movs r5,r5,LSL r4
movs r5,r5,LSR #24
colonne:
cmp r3,#18
beq fin2
movs r6,r5,LSR #7
movs r5,r5,LSL #1
and r5,r5,#255
cmp r6,#0
beq fin3
mov r0,r3
stmfd sp!,{r0}
mov r0,r2
stmfd sp!,{r0}
mov r0,r3
stmfd sp!,{r0}
mov r0,r2
stmfd sp!,{r0}
ldr r0,=0xFFF
stmfd sp!,{r0}
bl fillrect
add sp,sp,#5<<2
fin3:
add r3,r3,#1
b colonne
fin2:
sub r4,r4,#8
add r2,r2,#1
add r7,r7,#1
b ligne
finchar:
nop
fillrect:
stmfd sp!,{r0,r1,r2,r3,r4,r5,lr}
ldr r1,[sp, #11<<2]
ldr r2,[sp, #10<<2]
ldr r3,[sp, #9<<2]
ldr r4,[sp, #8<<2]
ldr r5,[sp, #7<<2]
mov r0,#PASET
bl lcd_write_command
mov r0,r2
bl lcd_write_data
mov r0,r4
bl lcd_write_data
mov r0,#CASET
bl lcd_write_command
mov r0,r1
bl lcd_write_data
mov r0,r3
bl lcd_write_data
sub r1,r3,r1
add r1,r1,#1
sub r2,r4,r2
add r2,r2,#1
mul r4,r1,r2
mov r4,r4,lsr #1
add r4,r4,#1
mov r1,r5,lsr #4
and r1,r1,#0xFF
mov r2,r5,lsl #4
orr r2,r5,lsr #8
and r2,r2,#0xFF
and r3,r5,#0xFF
mov r0,#RAMWR
bl lcd_write_command
fillrect_loop:
mov r0,r1
bl lcd_write_data
mov r0,r2
bl lcd_write_data
mov r0,r3
bl lcd_write_data
subs r4,r4,#1
bne fillrect_loop
mov r0,#NOP
bl lcd_write_command
ldmfd sp!,{r0,r1,r2,r3,r4,r5,pc}
自己解决,不指望你们了,呵呵