system_call.s

来自「ADS环境下的类似linux内核的操作系统」· S 代码 · 共 85 行

S
85
字号
;; MShowTec - www.mshowtec.com
;; msLinux system_call.s ver1.0
;; 20051221 lmjx create limiao@mshowtec.com
;;
;;

;;  MSLINUX_SYSTEM_CALL_S

	CODE32
	AREA	|C$$code|, CODE, READONLY
	
	EXPORT _sys_fork
	IMPORT find_empty_and_copy_process
	IMPORT schedule
	IMPORT errno_print
	IMPORT current
	IMPORT fork_tcb
	IMPORT last_pid
	
_sys_fork

	mov r0,#0
	stmfd sp!,{r0-r12,lr}
	mrs v1,CPSR
	stmfd sp!,{v1}

	bl find_empty_and_copy_process
	cmp r0,#0
	bne %0
	
	ldr r0,=current
	ldr r0,[r0]
	ldr r1,[r0,#0]
	mov r2,sp
	sub r3,r2,r1
	
	ldr r0,=fork_tcb
	ldr r0,[r0]
	ldr r1,[r0,#0]
	add r1,r1,r3
	str r1,[r0,#4]
	
	ldmfd	sp!, {v1}		; Restore the current status register
	msr	CPSR_cf, v1
	ldmfd	sp!, {r0-r12, lr}	; Restore all registers

	ldr r0,=last_pid
	ldr r0,[r0]
	
	bx lr
	
0
	ldmfd	sp!, {v1}		; Restore the current status register
	msr	CPSR_cf, v1
	ldmfd	sp!, {r0-r12, lr}	; Restore all registers

	mov r0,#-1
	bx lr
	
	IMPORT schedule
	EXPORT _sys_reschedule
	
_sys_reschedule
	bl schedule

;_sys_setstack(old_sp_top)
	IMPORT current
	EXPORT _sys_setstack
	
_sys_setstack

	mov r1,sp
	sub r2,r1,r0

	ldr r0,=current
	ldr r0,[r0]
	ldr r3,[r0,#4]
	add r3,r3,r2
	str r3,[r0,#4]
	mov sp,r3
	
	bx lr
		
	END

⌨️ 快捷键说明

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