process.a6

来自「汇编编程艺术」· A6 代码 · 共 104 行

A6
104
字号
StdGrp		group	stdlib, stddata

stddata		segment	para public 'sldata'
stddata		ends

stdlib		segment	para public 'slcode'

; # 10 routines in this package

externdef	sl_prcsinit:far, sl_prcsquit:far, sl_fork:far, sl_kill:far,
		sl_die:far, sl_yield:far, sl_coinit:far, sl_cocall:far,
		sl_cocalll:far, sl_WaitSemaph:far, sl_RlsSemaph:far
stdlib		ends


prcsinit	macro
		call	far ptr sl_prcsinit
		endm

prcsquit	macro
		call	far ptr sl_prcsquit
		endm

fork		macro
		call	far ptr sl_fork
		endm


kill		macro
		call	far ptr sl_kill
		endm

die		macro
		call	far ptr sl_die
		endm

yield		macro
		call	far ptr sl_yield
		endm


coinit		macro
		call	far ptr sl_coinit
		endm


cocall		macro	adrs
		ifb	<adrs>
		call	far ptr sl_cocall
		else
		call	far ptr sl_cocalll
		dd	adrs
		endif
		endm

WaitSemaph	macro	adrs
		call	far ptr sl_WaitSemaph
		endm

RlsSemaph	macro	adrs
		call	far ptr sl_RlsSemaph
		endm

; Process data structures:
;
; Process control block.
; NextProc field must be the first field in this structure since the dispatcher
; code assumes that it is at offset zero from a pointer to this structure.
; The regsp and regssfields appear next since they are the
; fields most often initialized in the structure.
; regip and regcs follow the regss entry since, for coroutines, they
; need to be initialized as well.  Most of the remaining fields do not
; normally need initialization.

pcb		struc
NextProc	dd	?
regsp		dw	?
regss		dw	?
regip		dw	?
regcs		dw	?

regax		dw	?
regbx		dw	?
regcx		dw	?
regdx		dw	?
regsi		dw	?
regdi		dw	?
regbp		dw	?
regds		dw	?
reges		dw	?
regflags	dw	?
PrcsID		dw	?
StartingTime	dd	?
StartingDate	dd	?
CPUTime		dd	?
pcb		ends


semaphore	struc
SemaCnt		dw	1
smaphrLst	dd	?
endsmaphrlst	dd	?
semaphore	ends

⌨️ 快捷键说明

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