⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot.asm

📁 Plasma IP Core 你可以利用这个组件在FPGA中设计MIPS结构的CPU
💻 ASM
字号:
################################################################### TITLE: Boot Up Code# AUTHOR: Steve Rhoads (rhoadss@yahoo.com)# DATE CREATED: 1/12/02# FILENAME: boot.asm# PROJECT: Plasma CPU core# COPYRIGHT: Software placed into the public domain by the author.#    Software 'as is' without warranty.  Author liable for nothing.# DESCRIPTION:#    Initializes the stack pointer and jumps to main2().##################################################################	.text	.align	2	.globl	entry	.ent	entryentry:   .set noreorder   #These eight instructions should be the first instructions.   #convert.exe previously initialized $gp, .sbss_start, .bss_end, $sp   la    $gp, _gp             #initialize stack pointer   la    $4, __bss_start      #$4 = .sbss_start   la    $5, _end             #$5 = .bss_end   la    $sp, InitStack+488   #initialize stack pointer$BSS_CLEAR:   sw    $0, 0($4)   slt   $3, $4, $5   bnez  $3, $BSS_CLEAR   addiu $4, $4, 4   jal   main   nop$L1:   j $L1   .end entry###################################################   #address 0x3c	.globl interrupt_service_routine	.ent	 interrupt_service_routineinterrupt_service_routine:   .set noreorder   .set noat   #Registers $26 and $27 are reserved for the OS   #Save all temporary registers   #Slots 0($29) through 12($29) reserved for saving a0-a3   addi  $29, $29, -104  #adjust sp   sw    $1,  16($29)    #at   sw    $2,  20($29)    #v0   sw    $3,  24($29)    #v1   sw    $4,  28($29)    #a0   sw    $5,  32($29)    #a1   sw    $6,  36($29)    #a2   sw    $7,  40($29)    #a3   sw    $8,  44($29)    #t0   sw    $9,  48($29)    #t1   sw    $10, 52($29)    #t2   sw    $11, 56($29)    #t3   sw    $12, 60($29)    #t4   sw    $13, 64($29)    #t5   sw    $14, 68($29)    #t6   sw    $15, 72($29)    #t7   sw    $24, 76($29)    #t8   sw    $25, 80($29)    #t9   sw    $31, 84($29)    #lr   mfc0  $26, $14        #C0_EPC=14 (Exception PC)   addi  $26, $26, -4    #Backup one opcode   sw    $26, 88($29)    #pc   mfhi  $27   sw    $27, 92($29)    #hi   mflo  $27   sw    $27, 96($29)    #lo   lui   $6,  0x2000       lw    $4,  0x20($6)   #IRQ_STATUS   lw    $6,  0x10($6)   #IRQ_MASK   and   $4,  $4, $6   jal   OS_InterruptServiceRoutine   addi  $5,  $29, 0   #Restore all temporary registers   lw    $1,  16($29)    #at   lw    $2,  20($29)    #v0   lw    $3,  24($29)    #v1   lw    $4,  28($29)    #a0   lw    $5,  32($29)    #a1   lw    $6,  36($29)    #a2   lw    $7,  40($29)    #a3   lw    $8,  44($29)    #t0   lw    $9,  48($29)    #t1   lw    $10, 52($29)    #t2   lw    $11, 56($29)    #t3   lw    $12, 60($29)    #t4   lw    $13, 64($29)    #t5   lw    $14, 68($29)    #t6   lw    $15, 72($29)    #t7   lw    $24, 76($29)    #t8   lw    $25, 80($29)    #t9   lw    $31, 84($29)    #lr   lw    $26, 88($29)    #pc   lw    $27, 92($29)    #hi   mthi  $27   lw    $27, 96($29)    #lo   mtlo  $27   addi  $29, $29, 104   #adjust spisr_return:   ori   $27, $0, 0x1    #re-enable interrupts   jr    $26   mtc0  $27, $12        #STATUS=1; enable interrupts   .end interrupt_service_routine   .set at###################################################   .globl OS_AsmInterruptEnable   .ent OS_AsmInterruptEnableOS_AsmInterruptEnable:   .set noreorder   mfc0  $2, $12   jr    $31   mtc0  $4, $12            #STATUS=1; enable interrupts   #nop   .set reorder   .end OS_AsmInterruptEnable###################################################	.globl	OS_AsmInterruptInit   .ent     OS_AsmInterruptInitOS_AsmInterruptInit:   .set noreorder   #Patch interrupt vector to 0x1000003c   la    $5, OS_AsmPatchValue   lw    $6, 0($5)   sw    $6, 0x3c($0)   lw    $6, 4($5)   sw    $6, 0x40($0)   lw    $6, 8($5)   sw    $6, 0x44($0)   lw    $6, 12($5)   jr    $31   sw    $6, 0x48($0)OS_AsmPatchValue:   #Registers $26 and $27 are reserved for the OS   #Code to place at address 0x3c   lui   $26, 0x1000   ori   $26, $26, 0x3c   jr    $26   nop   .set reorder   .end OS_AsmInterruptInit###################################################	.globl	setjmp   .ent     setjmpsetjmp:   .set noreorder   sw    $16, 0($4)   #s0   sw    $17, 4($4)   #s1   sw    $18, 8($4)   #s2   sw    $19, 12($4)  #s3   sw    $20, 16($4)  #s4   sw    $21, 20($4)  #s5   sw    $22, 24($4)  #s6   sw    $23, 28($4)  #s7   sw    $30, 32($4)  #s8   sw    $28, 36($4)  #gp   sw    $29, 40($4)  #sp   sw    $31, 44($4)  #lr   jr    $31   ori   $2,  $0, 0   .set reorder   .end setjmp###################################################	.globl	longjmp   .ent     longjmplongjmp:   .set noreorder   lw    $16, 0($4)   #s0   lw    $17, 4($4)   #s1   lw    $18, 8($4)   #s2   lw    $19, 12($4)  #s3   lw    $20, 16($4)  #s4   lw    $21, 20($4)  #s5   lw    $22, 24($4)  #s6   lw    $23, 28($4)  #s7   lw    $30, 32($4)  #s8   lw    $28, 36($4)  #gp   lw    $29, 40($4)  #sp   lw    $31, 44($4)  #lr   jr    $31   ori   $2,  $5, 0   .set reorder   .end longjmp###################################################	.globl	OS_AsmMult   .ent     OS_AsmMultOS_AsmMult:   .set noreorder   multu $4, $5   mflo  $2   mfhi  $4   jr    $31   sw    $4, 0($6)   .set reorder   .end OS_AsmMult###################################################   .globl OS_Syscall   .ent OS_SyscallOS_Syscall:   .set noreorder   syscall 0   jr    $31   nop   .set reorder   .end OS_Syscall

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -