# linkedlist.s # # For CSE351 Lec 15 on Structs # Demonstrates non-malloc allocation of structs # using global nodes N1,N2,N3 in Static Data. .text .globl addNode .type addNode, @function addNode: pushq %rbp pushq %rbx subq $8, %rsp movq %rdi, %rbx movq %rsi, %rbp movl $16, %edi call malloc movq %rbp, (%rax) movq %rbx, 8(%rax) addq $8, %rsp popq %rbx popq %rbp ret .size addNode, .-addNode .globl getNode .type getNode, @function getNode: movl $0, %eax jmp .L4 .L7: cmpl %esi, %eax jne .L5 movq (%rdi), %rax ret .L5: addl $1, %eax movq 8(%rdi), %rdi .L4: testq %rdi, %rdi jne .L7 movq $-1, %rax ret .size getNode, .-getNode .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "node %d = %ld\n" .text .globl main .type main, @function main: pushq %rbp pushq %rbx subq $8, %rsp # Replace the 3 calls to addNode # by loading address of N1 into # LL variable (%rbp) movq $N1, %rbp movl $-1, %ebx jmp .L9 .L10: movl %ebx, %esi movq %rbp, %rdi call getNode movq %rax, %rcx movl %ebx, %edx movl $.LC0, %esi movl $1, %edi movl $0, %eax call __printf_chk addl $1, %ebx .L9: cmpl $3, %ebx jle .L10 movl $0, %eax addq $8, %rsp popq %rbx popq %rbp ret .size main, .-main .data .align 16 N1: .quad 1 .quad N2 N3: .quad 3 .quad 0 N2: .quad 2 .quad N3