070.基于结构体的链表的实现

        下面这段代码实现以一个链表,目前他支持的操作是初始化,如下面这段代码所示,为了简化指针的使用,将指针重命名为LinkedList标号。类似于高级语言中的链表实现流程,这里的LABEL的作用就相当于typedef 或者是rename操作。简化了后面的对其名字的引用的复杂程度。
; Creating a Linked List            (List.asm)

; This program shows how the STRUC directive
; and the REPT directive can be combined to
; create a linked list at assembly time.

INCLUDE Irvine32.inc

ListNode STRUCT												;链表的结构体
	  NodeData DWORD ?										;链表的数据区域
	  NextPtr  DWORD ?										;链表的指针域
ListNode ENDS

TotalNodeCount = 15											;设置链表的长度
NULL = 0													;链表的结尾
Counter = 0													;当前的遍历位置

.data
	LinkedList LABEL PTR ListNode							;定义链表的头结点    格式:变量/标号 LABEL 类型
	REPT TotalNodeCount										;循环创建节点的操作15次
		Counter = Counter + 1								;设置当前节点的数值
		ListNode <Counter, ($ + Counter * SIZEOF ListNode)>	;设置下一个节点的指向
	ENDM
	ListNode <0,0>											; tail node	设置尾节点,这里人为地设置以0位链表的末尾					

.code
	main PROC
		mov  esi,OFFSET LinkedList							;将esi指向链表的头结点

															; Display the integers in the NodeData members.
		NextNode:											;循环遍历这个链表
															; Check for the tail node.
			mov  eax,(ListNode PTR [esi]).NextPtr			;获得指向下一个结点的指针
			cmp  eax,NULL									;如果结点为空,到了链表的末尾退出
			je   quit

															; Display the node data.
			mov  eax,(ListNode PTR [esi]).NodeData			;否则指向下一个节点
			call WriteDec									;将数据域赋值给eax,并输出打印
			call Crlf										;换行

															; Get pointer to next node.
			mov  esi,(ListNode PTR [esi]).NextPtr
			jmp  NextNode									;对下一个链表节点进行判断

		quit:
			call WaitMsg									;打印链表结束之后等待用户输入字符
			exit											;退出程序
	main ENDP
END main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值