.text addi sp, zero, 2000 #�ڴ��ջ��ʼ�� ############################################################# #�����Ʋ�?,����addi,andi,slli,srli,srai,or,ori,nor,ecall LED�������Ʒ�ʽ������ʾ���� ############################################################# .text START: addi s0,zero,1 slli s3, s0, 31 # s3=0x80000000 srai s3, s3, 31 # s3=0xFFFFFFFF add s0,zero,zero # s0=0 addi s2,zero,12 addi s6,zero,8 #�����Ƽ��� zmd_loop: addi s0, s0, 1 #������һ�������Ƶ��� andi s0, s0, 15 ####################################### addi t0,zero,8 addi t1,zero,1 left: slli s3, s3, 4 #���������� or s3, s3, s0 add a0,zero,s3 # display s3 addi a7,zero,34 # system call for LED display ecall # display sub t0,t0,t1 bne t0,zero,left ####################################### addi s0, s0, 1 #������һ�������Ƶ��� addi t6,zero,15 and s0, s0, t6 slli s0, s0, 28 addi t0,zero,8 addi t1,zero,1 zmd_right: srli s3, s3, 4 #���������� or s3, s3, s0 add a0,zero,s3 # display s3 addi a7,zero,34 # system call for LED display ecall # display sub t0,t0,t1 bne t0,zero,zmd_right srli s0, s0, 28 ####################################### sub s6,s6,t1 beq s6,zero, exit j zmd_loop exit: add t0,zero,zero xori t0,t0,-1 #test nor ori slli t0,t0,16 ori t0,t0,-1 add a0,zero,t0 # display t0 addi a7,zero,34 # system call for LED display ecall # display j START # loop forever #InteruptProgram1: ############################################################################################# # exceptoin 1 # ʹ��?s6? s5?s4?s3?s0?a0?a7 ############################################################################################# ################# �����ֳ� InteruptProgram1:sw a7, 0(sp) addi sp, sp, 4 sw a0, 0(sp) addi sp, sp, 4 sw s0, 0(sp) addi sp, sp, 4 sw s3, 0(sp) addi sp, sp, 4 sw s4, 0(sp) addi sp, sp, 4 sw s5, 0(sp) addi sp, sp, 4 sw s6, 0(sp) addi sp, sp, 4 csrrsi s6,0x41,0 #s6=uepc sw s6, 0(sp) #uepcѹջ���� addi sp, sp, 4 ################# ���ж� sw t0,0(sp) addi sp,sp,4 sw t1,0(sp) addi sp,sp,4 sw t2,0(sp) addi sp,sp,4 sw t3,0(sp) addi sp,sp,4 sw t4,0(sp) addi sp,sp,4 sw t5,0(sp) addi sp,sp,4 sw t6,0(sp) addi sp,sp,4 sw s1,0(sp) addi sp,sp,4 sw s2,0(sp) addi sp,sp,4 csrrsi zero,0x4,1 #ustatus.MIE=1 ################# �жϷ��� addi s6,zero,1 #�ж�?1,2,3 ��ͬ�жϺ���ʾֵ��һ�� addi s4,zero,3 #ѭ��������ʼֵ addi s5,zero,1 #�������ۼ�ֵ IntLoop1: add s0,zero,s6 IntLeftShift1: slli s0, s0, 4 or s3,s0,s4 add a0,zero,s3 #display s0 addi a7,zero,34 # display hex ecall bne s0, zero, IntLeftShift1 sub s4,s4,s5 #ѭ�������ݼ� bne s4, zero, IntLoop1 ################# ���ж� csrrci zero,0x4,1 #ustatus.MIE=0 ############### ����ָ�� ����(SLL/SB/BLTU ֮һ) ############### addi t0,zero,1 addi t1,zero,3 addi s1,zero,0x8 slli s1,s1,8 addi s1,s1,0x76 add a0,zero,s1 addi a7,zero,34 ecall addi t3,zero,8 sll_branch: sll s1,s1,t0 sll s1,s1,t1 add a0,zero,s1 addi a7,zero,34 ecall addi t3,t3,-1 bne t3,zero,sll_branch addi sp,sp,-4 lw s2,0(sp) addi sp,sp,-4 lw s1,0(sp) addi sp,sp,-4 lw t6,0(sp) addi sp,sp,-4 lw t5,0(sp) addi sp,sp,-4 lw t4,0(sp) addi sp,sp,-4 lw t3,0(sp) addi sp,sp,-4 lw t2,0(sp) addi sp,sp,-4 lw t1,0(sp) addi sp,sp,-4 lw t0,0(sp) ################# �ָ��ֳ� addi sp, sp, -4 lw s6, 0(sp) csrrw zero,0x41,s6 #uepc=s6 addi sp, sp, -4 lw s6, 0(sp) addi sp, sp, -4 lw s5, 0(sp) addi sp, sp, -4 lw s4, 0(sp) addi sp, sp, -4 lw s3, 0(sp) addi sp, sp, -4 lw s0, 0(sp) addi sp, sp, -4 lw a0, 0(sp) addi sp, sp, -4 lw a7, 0(sp) ################ �жϷ��� uret #ͬ�����жϣ�uepc-->pc #InteruptProgram2: ############################################################################################# # exceptoin 2 # ʹ��?s6? s5?s4?s3?s0?a0?a7 ############################################################################################# ################# �����ֳ� InteruptProgram2:sw a7, 0(sp) addi sp, sp, 4 sw a0, 0(sp) addi sp, sp, 4 sw s0, 0(sp) addi sp, sp, 4 sw s3, 0(sp) addi sp, sp, 4 sw s4, 0(sp) addi sp, sp, 4 sw s5, 0(sp) addi sp, sp, 4 sw s6, 0(sp) addi sp, sp, 4 csrrsi s6,0x41,0 #s6=uepc sw s6, 0(sp) #uepcѹջ���� addi sp, sp, 4 ################# ���ж� sw t0,0(sp) addi sp,sp,4 sw t1,0(sp) addi sp,sp,4 sw t2,0(sp) addi sp,sp,4 sw t3,0(sp) addi sp,sp,4 sw t4,0(sp) addi sp,sp,4 sw t5,0(sp) addi sp,sp,4 sw t6,0(sp) addi sp,sp,4 sw s1,0(sp) addi sp,sp,4 sw s2,0(sp) addi sp,sp,4 csrrsi zero,0x4,1 #ustatus.MIE=1 ################# �жϷ��� addi s6,zero,2 #�ж�?1,2,3 ��ͬ�жϺ���ʾֵ��һ�� addi s4,zero,3 #ѭ��������ʼֵ addi s5,zero,1 #�������ۼ�ֵ IntLoop2: add s0,zero,s6 IntLeftShift2: slli s0, s0, 4 or s3,s0,s4 add a0,zero,s3 #display s0 addi a7,zero,34 # display hex ecall bne s0, zero, IntLeftShift2 sub s4,s4,s5 #ѭ�������ݼ� bne s4, zero, IntLoop2 ################# ���ж� csrrci zero,0x4,1 #ustatus.MIE=0 ############### ����ָ�� ����(SLL/SB/BLTU ֮һ) ############### addi t1,zero,0 addi t3,zero,32 addi s1,zero,0x00 addi s2,zero,0x01 sb_store: sb s1,0(t1) add a0,zero,s1 addi a7,zero,34 ecall add s1,s1,s2 addi t1,t1,1 addi t3,t3,-1 bne t3,zero,sb_store addi t3,zero,8 addi t1,zero,0 sb_branch: lw s1,0(t1) add a0,zero,s1 addi a7,zero,34 ecall addi t1,t1,4 addi t3,t3,-1 bne t3,zero,sb_branch addi sp,sp,-4 lw s2,0(sp) addi sp,sp,-4 lw s1,0(sp) addi sp,sp,-4 lw t6,0(sp) addi sp,sp,-4 lw t5,0(sp) addi sp,sp,-4 lw t4,0(sp) addi sp,sp,-4 lw t3,0(sp) addi sp,sp,-4 lw t2,0(sp) addi sp,sp,-4 lw t1,0(sp) addi sp,sp,-4 lw t0,0(sp) ################# �ָ��ֳ� addi sp, sp, -4 lw s6, 0(sp) csrrw zero,0x41,s6 #uepc=s6 addi sp, sp, -4 lw s6, 0(sp) addi sp, sp, -4 lw s5, 0(sp) addi sp, sp, -4 lw s4, 0(sp) addi sp, sp, -4 lw s3, 0(sp) addi sp, sp, -4 lw s0, 0(sp) addi sp, sp, -4 lw a0, 0(sp) addi sp, sp, -4 lw a7, 0(sp) ################ �жϷ��� uret #ͬ�����жϣ�uepc-->pc #InteruptProgram3: ############################################################################################# # exceptoin 3 # ʹ��?s6? s5?s4?s3?s0?a0?a7 ############################################################################################# ################# �����ֳ� InteruptProgram3:sw a7, 0(sp) addi sp, sp, 4 sw a0, 0(sp) addi sp, sp, 4 sw s0, 0(sp) addi sp, sp, 4 sw s3, 0(sp) addi sp, sp, 4 sw s4, 0(sp) addi sp, sp, 4 sw s5, 0(sp) addi sp, sp, 4 sw s6, 0(sp) addi sp, sp, 4 csrrsi s6,0x41,0 #s6=uepc sw s6, 0(sp) #uepcѹջ���� addi sp, sp, 4 ################# ���ж� sw t0,0(sp) addi sp,sp,4 sw t1,0(sp) addi sp,sp,4 sw t2,0(sp) addi sp,sp,4 sw t3,0(sp) addi sp,sp,4 sw t4,0(sp) addi sp,sp,4 sw t5,0(sp) addi sp,sp,4 sw t6,0(sp) addi sp,sp,4 sw s1,0(sp) addi sp,sp,4 sw s2,0(sp) addi sp,sp,4 csrrsi zero,0x4,1 #ustatus.MIE=1 ################# �жϷ��� addi s6,zero,3 #�ж�?1,2,3 ��ͬ�жϺ���ʾֵ��һ�� addi s4,zero,3 #ѭ��������ʼֵ addi s5,zero,1 #�������ۼ�ֵ IntLoop3: add s0,zero,s6 IntLeftShift3: slli s0, s0, 4 or s3,s0,s4 add a0,zero,s3 #display s0 addi a7,zero,34 # display hex ecall bne s0, zero, IntLeftShift3 sub s4,s4,s5 #ѭ�������ݼ� bne s4, zero, IntLoop3 ################# ���ж� csrrci zero,0x4,1 #ustatus.MIE=0 ############### ����ָ�� ����(SLL/SB/BLTU ֮һ) ############### addi s1,zero,-15 bltu_branch: add a0,zero,s1 addi a7,zero,34 ecall addi s1,s1,1 bltu zero,s1,bltu_branch add a0,zero,s1 addi a7,zero,34 ecall addi sp,sp,-4 lw s2,0(sp) addi sp,sp,-4 lw s1,0(sp) addi sp,sp,-4 lw t6,0(sp) addi sp,sp,-4 lw t5,0(sp) addi sp,sp,-4 lw t4,0(sp) addi sp,sp,-4 lw t3,0(sp) addi sp,sp,-4 lw t2,0(sp) addi sp,sp,-4 lw t1,0(sp) addi sp,sp,-4 lw t0,0(sp) ################# �ָ��ֳ� addi sp, sp, -4 lw s6, 0(sp) csrrw zero,0x41,s6 #uepc=s6 addi sp, sp, -4 lw s6, 0(sp) addi sp, sp, -4 lw s5, 0(sp) addi sp, sp, -4 lw s4, 0(sp) addi sp, sp, -4 lw s3, 0(sp) addi sp, sp, -4 lw s0, 0(sp) addi sp, sp, -4 lw a0, 0(sp) addi sp, sp, -4 lw a7, 0(sp) ################ �жϷ��� uret #ͬ�����жϣ�uepc-->pc