📄 main.s
字号:
.short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 1 .short 1 .short 0 .short 1 .short 1 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 1 .short 1 .short 1 .short 0 .short 0 .short 1 .short 1 .short 1 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 0 .short 0 .short 0 .short 0 .short 0 .short 1 .short 1 .short 1 .short 0 .short 0 .short 0 .short 0 .global videoBuffer .align 2 .type videoBuffer, %object .size videoBuffer, 4videoBuffer: .word 100663296 .global velX .align 2 .type velX, %object .size velX, 4velX: .word 2 .global velY .align 2 .type velY, %object .size velY, 4velY: .word 1 .global score1 .bss .global score1 .align 2 .type score1, %object .size score1, 4score1: .space 4 .global score2 .global score2 .align 2 .type score2, %object .size score2, 4score2: .space 4 .text .align 2 .global setMode .type setMode, %functionsetMode: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. orr r0, r0, #1024 @ mode mov r3, #67108864 @ lr needed for prologue str r0, [r3, #0] bx lr .size setMode, .-setMode .align 2 .global drawbox .type drawbox, %functiondrawbox: @ Function supports interworking. @ args = 4, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, lr} cmp r1, r3 @ y, bottom mov r5, r3 @ bottom mov r6, r0 @ left mov r4, r1 @ y, top mov r0, r2 @ right ldrsh r3, [sp, #24] @ color, color bge .L15 ldr r8, .L18 mov r7, r3, asl #16 @ color rsb r1, r1, r1, asl #4 @ y, y.L13: cmp r6, r0 @ x, right bge .L17 add r3, r6, r1, asl #4 @ x ldr r2, [r8, #0] @ videoBuffer mov r3, r3, asl #1 mov lr, r7, lsr #16 @ color rsb ip, r6, r0 @ x, x, right.L12: subs ip, ip, #1 @ x, x strh lr, [r3, r2] @ movhi @ color add r3, r3, #2 bne .L12.L17: add r4, r4, #1 @ y, y cmp r4, r5 @ y, bottom add r1, r1, #15 blt .L13.L15: ldmfd sp!, {r4, r5, r6, r7, r8, lr} bx lr.L19: .align 2.L18: .word videoBuffer .size drawbox, .-drawbox .align 2 .global buttonPressed .type buttonPressed, %functionbuttonPressed: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. mov r3, #67108864 ldr r2, [r3, #304] tst r2, r0 @ button movne r0, #0 @ button moveq r0, #1 @ button @ lr needed for prologue bx lr .size buttonPressed, .-buttonPressed .align 2 .global print .type print, %functionprint: @ Function supports interworking. @ args = 0, pretend = 0, frame = 4 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} ldrb ip, [r2, #0] @ zero_extendqisi2 @ * str mov r3, r3, asl #16 cmp ip, #0 sub sp, sp, #4 mov r9, r2 @ str mov sl, r0 @ left mov r3, r3, asr #16 @ color mov r8, #0 @ pos beq .L41 rsb r2, r1, r1, asl #4 @ top, top mov r2, r2, asl #4 mov r3, r3, asl #16 @ color ldr r5, .L46 ldr r6, .L46+4 str r2, [sp, #0] mov r4, r3, lsr #16 @ color.L39: sub r3, ip, #32 and r3, r3, #255 @ letter ldr r1, [sp, #0] mov r7, r3, asl #3 @ letter add r9, r9, #1 @ str, str mov r0, #0 @ y.L38: add r3, sl, r8 @ left, pos add r3, r3, r1 add r2, r7, r0 @ y mov r2, r2, asl #4 mov ip, r3, asl #1 mov lr, #0 @ x.L37: ldrh r3, [r2, r5] @ draw, font cmp r3, #0 @ draw ldrne r3, [r6, #0] @ videoBuffer add lr, lr, #1 @ x, x strneh r4, [ip, r3] @ movhi @ color cmp lr, #7 @ x add r2, r2, #2 add ip, ip, #2 ble .L37 add r0, r0, #1 @ y, y cmp r0, #7 @ y add r1, r1, #240 ble .L38 ldrb ip, [r9, #0] @ zero_extendqisi2 @ * str cmp ip, #0 add r8, r8, #8 @ pos, pos bne .L39.L41: add sp, sp, #4 ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, lr} bx lr.L47: .align 2.L46: .word font .word videoBuffer .size print, .-print .section .rodata.str1.4,"aMS",%progbits,1 .align 2.LC0: .ascii "%i\000" .text .align 2 .global printScores .type printScores, %functionprintScores: @ Function supports interworking. @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {r4, r5, r6, r7, r8, fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #12 mov r4, #0 mov r0, r4 mov r1, r4 mov r2, #20 mov r3, #10 str r4, [sp, #0] bl drawbox mov r1, r4 mov r3, #10 mov r0, #220 mov r2, #239 ldr r8, .L49 str r4, [sp, #0] bl drawbox ldr r3, .L49+4 sub r5, fp, #40 mov r6, #65280 ldr r2, [r3, #0] @ score1 mov r1, r8 ldr r7, .L49+8 add r6, r6, #255 mov r0, r5 mov lr, pc bx r7 mov r3, r6 mov r1, r4 mov r2, r5 mov r0, #5 bl print ldr r3, .L49+12 mov r1, r8 ldr r2, [r3, #0] @ score2 mov r0, r5 mov lr, pc bx r7 mov r1, r4 mov r2, r5 mov r3, r6 mov r0, #220 bl print ldmea fp, {r4, r5, r6, r7, r8, fp, sp, lr} bx lr.L50: .align 2.L49: .word .LC0 .word score1 .word sprintf .word score2 .size printScores, .-printScores .align 2 .global eraseBall .type eraseBall, %functioneraseBall: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L52 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L52+4 ldr r0, [r3, #0] @ ballX ldr r1, [r2, #0] @ ballY mov ip, #0 add r2, r0, #6 add r3, r1, #6 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L53: .align 2.L52: .word ballX .word ballY .size eraseBall, .-eraseBall .align 2 .global updateBall .type updateBall, %functionupdateBall: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r6, r7, r8, lr} ldr ip, .L59 ldr r4, .L59+4 ldr r0, .L59+8 ldr lr, [r4, #0] @ velX ldr r1, [ip, #0] @ ballX ldr r7, .L59+12 add r1, r1, lr ldr r3, [r7, #0] @ velY ldr r2, [r0, #0] @ ballY ldr r6, .L59+16 cmp r1, #233 add r2, r2, r3 rsb r5, r3, #0 ldrgt r3, [r6, #0] @ score1 rsb lr, lr, #0 addgt r3, r3, #1 str r1, [ip, #0] @ ballX mov ip, r1 strgt lr, [r4, #0] @ velX strgt r3, [r6, #0] @ score1 cmp ip, #0 str r2, [r0, #0] @ ballY ldr r8, .L59+20 sub r0, r2, #12 ble .L58.L56: cmp r0, #141 strhi r5, [r7, #0] @ velY ldmfd sp!, {r4, r5, r6, r7, r8, lr} bx lr.L58: ldr r3, [r4, #0] @ velX ldr r2, [r8, #0] @ score2 rsb r3, r3, #0 add r2, r2, #1 str r3, [r4, #0] @ velX str r2, [r8, #0] @ score2 b .L56.L60: .align 2.L59: .word ballX .word velX .word ballY .word velY .word score1 .word score2 .size updateBall, .-updateBall .align 2 .global drawBall .type drawBall, %functiondrawBall: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L62 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L62+4 ldr r0, [r3, #0] @ ballX ldr r1, [r2, #0] @ ballY mov ip, #61440 add ip, ip, #15 add r2, r0, #6 add r3, r1, #6 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L63: .align 2.L62: .word ballX .word ballY .size drawBall, .-drawBall .align 2 .global erasePaddle1 .type erasePaddle1, %functionerasePaddle1: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L65 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L65+4 ldr r0, [r3, #4] @ paddleX ldr r1, [r2, #4] @ paddleY mov ip, #0 add r2, r0, #8 add r3, r1, #28 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L66: .align 2.L65: .word paddleX .word paddleY .size erasePaddle1, .-erasePaddle1 .align 2 .global updatePaddle1 .type updatePaddle1, %functionupdatePaddle1: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, lr} ldr r3, .L74 ldr r0, .L74+4 ldr r2, [r3, #0] @ velX ldr r1, [r0, #4] @ paddleY cmp r2, #0 add ip, r1, #14 @ py blt .L73.L67: ldmfd sp!, {r4, lr} bx lr.L73: ldr r3, .L74+8 ldr r2, [r3, #0] @ ballX cmp r2, #119 ldr lr, .L74+12 bgt .L67 ldr r4, [lr, #0] @ ballY cmp ip, r4 @ py sub r2, r1, #1 ble .L69 cmp r2, #11 movle r3, #12 str r2, [r0, #4] @ paddleY strle r3, [r0, #4] @ paddleY.L69: cmp ip, r4 @ py bge .L67 ldr r3, [r0, #4] @ paddleY add r3, r3, #1 cmp r3, #132 str r3, [r0, #4] @ paddleY movgt r3, #132 strgt r3, [r0, #4] @ paddleY b .L67.L75: .align 2.L74: .word velX .word paddleY .word ballX .word ballY .size updatePaddle1, .-updatePaddle1 .align 2 .global drawPaddle1 .type drawPaddle1, %functiondrawPaddle1: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L77 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L77+4 ldr r0, [r3, #4] @ paddleX ldr r1, [r2, #4] @ paddleY mov ip, #65280 add r2, r0, #8 add r3, r1, #28 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L78: .align 2.L77: .word paddleX .word paddleY .size drawPaddle1, .-drawPaddle1 .align 2 .global erasePaddle2 .type erasePaddle2, %functionerasePaddle2: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L80 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L80+4 ldr r0, [r3, #8] @ paddleX ldr r1, [r2, #8] @ paddleY mov ip, #0 add r2, r0, #8 add r3, r1, #28 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L81: .align 2.L80: .word paddleX .word paddleY .size erasePaddle2, .-erasePaddle2 .align 2 .global updatePaddle2 .type updatePaddle2, %functionupdatePaddle2: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} mov r0, #64 sub fp, ip, #4 bl buttonPressed mov r3, r0 cmp r3, #0 ldr r1, .L87 mov r0, #128 beq .L83 ldr r3, [r1, #8] @ paddleY sub r2, r3, #2 cmp r3, #10 strgt r2, [r1, #8] @ paddleY.L83: bl buttonPressed cmp r0, #0 ldr r1, .L87 beq .L82 ldr r3, [r1, #8] @ paddleY add r2, r3, #2 cmp r3, #130 strle r2, [r1, #8] @ paddleY.L82: ldmea fp, {fp, sp, lr} bx lr.L88: .align 2.L87: .word paddleY .size updatePaddle2, .-updatePaddle2 .align 2 .global drawPaddle2 .type drawPaddle2, %functiondrawPaddle2: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {fp, ip, lr, pc} ldr r3, .L90 sub fp, ip, #4 sub sp, sp, #4 ldr r2, .L90+4 ldr r0, [r3, #8] @ paddleX ldr r1, [r2, #8] @ paddleY mov ip, #65280 add r2, r0, #8 add r3, r1, #28 str ip, [sp, #0] bl drawbox ldmea fp, {fp, sp, lr} bx lr.L91: .align 2.L90: .word paddleX .word paddleY .size drawPaddle2, .-drawPaddle2 .align 2 .global checkCollisions .type checkCollisions, %functioncheckCollisions: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, lr} ldr r3, .L95 ldr lr, .L95+4 ldr r2, [r3, #0] @ ballY ldr ip, [lr, #0] @ ballX add r2, r2, #3 @ y ldr r1, .L95+8 rsb r2, r2, r2, asl #4 @ y, y add r3, ip, #3 @ x add r3, r3, r2, asl #4 @ x ldr r0, [r1, #0] @ videoBuffer mov r3, r3, asl #1 ldrh r2, [r3, r0] ldr r4, .L95+12 cmp r2, #0 ldrne r3, [r4, #0] @ velX rsbne r3, r3, #0 addne r2, ip, r3 strne r2, [lr, #0] @ ballX strne r3, [r4, #0] @ velX ldmfd sp!, {r4, lr} bx lr.L96: .align 2.L95: .word ballY .word ballX .word videoBuffer .word velX .size checkCollisions, .-checkCollisions .align 2 .global waitRetrace .type waitRetrace, %functionwaitRetrace: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. @ lr needed for prologue mov r2, #67108864.L98: ldrh r3, [r2, #6] cmp r3, #160 bne .L98 mov r2, #67108864.L101: ldrh r3, [r2, #6] cmp r3, #160 beq .L101 bx lr .size waitRetrace, .-waitRetrace .section .rodata.str1.4 .align 2.LC1: .ascii "PONG\000" .text .align 2 .global main .type main, %functionmain: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp stmfd sp!, {r4, r5, r6, r7, r8, fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #4 mov r0, #3 bl setMode ldr ip, .L109 mov lr, #117 str lr, [ip, #0] @ ballX ldr ip, .L109+4 mov r6, #0 ldr r7, .L109+8 ldr r8, .L109+12 mov r4, #40 str r4, [ip, #0] @ ballY mov r0, r6 mov r1, r6 mov r5, #66 mov r2, #239 mov r3, #159 mov lr, #220 mov ip, #10 str lr, [r7, #8] @ paddleX str r5, [r8, #8] @ paddleY str ip, [r7, #4] @ paddleX str r5, [r8, #4] @ paddleY str r6, [sp, #0] bl drawbox mov r0, #104 mov r1, #1 ldr r2, .L109+16 mov r3, #60928 bl print.L108: bl waitRetrace bl eraseBall bl erasePaddle1 bl erasePaddle2 bl updatePaddle1 bl updatePaddle2 bl updateBall bl drawPaddle1 bl drawPaddle2 bl checkCollisions bl drawBall bl printScores b .L108.L110: .align 2.L109: .word ballX .word ballY .word paddleX .word paddleY .word .LC1 .size main, .-main .align 2 .global drawpixel .type drawpixel, %functiondrawpixel: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L112 rsb r1, r1, r1, asl #4 @ y, y add r0, r0, r1, asl #4 @ x ldr r1, [r3, #0] @ videoBuffer mov r0, r0, asl #1 @ lr needed for prologue strh r2, [r0, r1] @ movhi bx lr.L113: .align 2.L112: .word videoBuffer .size drawpixel, .-drawpixel .align 2 .global getpixel .type getpixel, %functiongetpixel: @ Function supports interworking. @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L115 rsb r1, r1, r1, asl #4 @ y, y add r0, r0, r1, asl #4 @ x ldr r2, [r3, #0] @ videoBuffer mov r0, r0, asl #1 ldrh r0, [r0, r2] @ x @ lr needed for prologue bx lr.L116: .align 2.L115: .word videoBuffer .size getpixel, .-getpixel .comm paddleX, 12, 32 .comm paddleY, 12, 32 .comm ballX, 4, 32 .comm ballY, 4, 32 .ident "GCC: (GNU) 3.3.2"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -