汇编------双向循环链表

本文深入探讨了如何使用汇编语言来创建和操作双向循环链表。内容涵盖链表的基本概念,汇编指令在链表操作中的应用,以及如何实现链表的插入、删除和遍历等关键操作。通过实例解析,帮助读者掌握低级别编程的技巧。
摘要由CSDN通过智能技术生成
.section .rodata
	.LC0:.string "%d "


//struct node
//{
//	int value;
//	struct node *pre;
//	struct node *next;
//}
//
//
//struct list
//{
//	struct node nod;
//	int count;
//}

.section .text
//void init(struct list *ls);
init:
	pushl %ebp
	movl %esp,%ebp
		
	movl 8(%ebp),%eax
	movl $0,(%eax)
	movl %eax,4(%eax)
	movl %eax,8(%eax)
	movl $0,12(%eax)	
	
	movl %ebp,%esp
	popl %ebp
	ret

//void add(struct list *ls,int val)
add:
	pushl %ebp
	movl %esp,%ebp
	
	pushl $12
	call malloc
	addl $4,%esp
	
	movl 12(%ebp),%ecx
	movl %ecx,(%eax)
	
	movl 8(%ebp),%ecx
	movl 4(%ecx),%edx

	// edx   eax  ecx	
	movl %edx,4(%eax)
	movl %ecx,8(%eax)
	
	movl %eax,4(%ecx)
	movl %eax,8(%edx)
	
	addl $1,16(%eax)
	
	movl %ebp,%esp
	popl %ebp
	ret

//void print(list *ls)
print:
	pushl %ebp
	movl %esp,%ebp
	pushl %esi
	pushl %edi
	
	movl 8(%ebp),%eax
	movl %eax,%esi
	movl 8(%eax),%edi
	
	jmp .L1
.L2:
	pushl (%edi)
	pushl $.LC0
	call printf
	addl $8,%esp
	
	movl 8(%edi),%edi
.L1:
	cmpl %esi,%ed
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值