crlist.asm

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

ASM
74
字号
; Need to include "lists.a" in order to get list structure definition.

		include	lists.a
		extrn	sl_malloc:far


StdGrp		group	stdlib,stddata
stddata		segment	para public 'sldata'
stddata		ends

stdlib		segment	para public 'slcode'
		assume	cs:stdgrp

; sl_CreateList-	Allocates storage for a new list variable on the
;			heap.  Initializes appropriate fields.
;
; Randall Hyde  3/2/92
;
; On Entry:
;
;		CX contains the number of bytes of data for each node
;		in the list (does not include the size of the links, etc.)
;
; On Exit:	ES:DI points at list variable on the head.
;		Carry is set if malloc error.

		public	sl_CreateList
sl_CreateList	proc	far
		push	cx
		mov	cx, size List
		call	sl_malloc
		pop	cx
		jc	BadCreateList

; The following code varies depending upon whether this is MASM 6.0 or
; some other assembler:

		ifndef	@version
		mov	es:[di].ListSize, cx	;Not MASM 5.1 or MASM 6.0
		mov	word ptr es:[di].Head, 0
		mov	word ptr es:[di+2].Head, 0
		mov	word ptr es:[di].Tail, 0
		mov	word ptr es:[di+2].Tail, 0
		mov	word ptr es:[di].CurrentNode, 0
		mov	word ptr es:[di+2].CurrentNode, 0

		else
		if	@version ge 600
		mov	es:[di].list.ListSize, cx	;MASM 6.0 or later
		mov	word ptr es:[di].list.Head, 0
		mov	word ptr es:[di+2].list.Head, 0
		mov	word ptr es:[di].list.Tail, 0
		mov	word ptr es:[di+2].list.Tail, 0
		mov	word ptr es:[di].List.CurrentNode, 0
		mov	word ptr es:[di+2].List.CurrentNode, 0

		else
		mov	es:[di].ListSize, cx		;Probably MASM 5.1
		mov	word ptr es:[di].Head, 0
		mov	word ptr es:[di+2].Head, 0
		mov	word ptr es:[di].Tail, 0
		mov	word ptr es:[di+2].Tail, 0
		mov	word ptr es:[di].CurrentNode, 0
		mov	word ptr es:[di+2].CurrentNode, 0
		endif
		endif
		clc				;Not really needed, C=0 already
BadCreateList:	ret

sl_CreateList	endp

stdlib		ends
		end

⌨️ 快捷键说明

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