我调用一个函数pixel的循环不起作用。它调用了函数一次就停止循环。下面是我的代码:
.语法统一.cpu cortex-m4 .equ显示器,0xD 0000000//存储器:像素范围
.text
.global pixel
.thumb_func
.align
// Draws the pixel word passed in R2 to the pixel location given by the column in R0 and the row in R1
pixel:
//r0 = col (10-19) (input) //#0xD0000000
//r1 = row 75 (input) //i
//r2 = color_red (input)
//r3 = #240
mov r3, #240
mul r1, r3 //row * 240
add r1, r0 //i = (row * 240) + col
ldr r0, =DISPLAY //load the memmory address of #0xD0000000 into r0
str r2, [r0, r1, lsl #2] //store value in r2 (color red) into memory address specified by r0 + r1 * 4
//dont need to loop and increment memory adress (index) i because the function only suppose to print 1 pixel at a time
bx lr //print 1 [color] pixel at i
.global rect
.thumb_func
.align
// Fills in a rectangle with the pixel word passed in R0.
// The rectangle fills all pixels between (column,row) coordinates of (50,150) to (149,249), inclusive.
rect:
mov r3, r0
//r0 = color_? j
//r1 = i i
//r2 = j color_?
//r3 =
//r12 =
mov r1, #150 //r1 = i (row)
loopi:
mov r2, #50 //r2 = j (col)
loopj:
// Body of nested loop is here
push {r4-r11, lr} // preserve registers
mov r4, r1 //move col into r4
mov r5, r2 //move row into r5
mov r6, r3 //move color into r6
mov r2, r6 // r2 = color
mov r0, r5 // r0 = col
mov r1, r4 // r1 = row
bl pixel // call pixel function
mov r2, r0
pop {r4-r11, pc} // restore registers and return
add r2, #1 // increment col
cmp r2, #150
blo loopj
add r1, #1 // increment row
cmp r1, #250
blo loopi
bx lr
.end
我尝试了不同的寄存器或在循环外调用push pop else,但无论我做什么,循环都不起作用。
1条答案
按热度按时间pgvzfuti1#