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