implement array subscript for assignment in codegen
This commit is contained in:
parent
870cf8f0b4
commit
667769d1c0
3 changed files with 195 additions and 5 deletions
90
test.s
Normal file
90
test.s
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
.section .text
|
||||
.global main
|
||||
main:
|
||||
push %rbp
|
||||
mov %rsp, %rbp
|
||||
sub $256, %rsp
|
||||
movb $72, -32(%rbp)
|
||||
movb $101, -31(%rbp)
|
||||
movb $108, -30(%rbp)
|
||||
movb $108, -29(%rbp)
|
||||
movb $111, -28(%rbp)
|
||||
movb $32, -27(%rbp)
|
||||
movb $119, -26(%rbp)
|
||||
movb $111, -25(%rbp)
|
||||
movb $114, -24(%rbp)
|
||||
movb $108, -23(%rbp)
|
||||
movb $100, -22(%rbp)
|
||||
movb $33, -21(%rbp)
|
||||
movb $10, -20(%rbp)
|
||||
lea -32(%rbp), %rax
|
||||
mov %rax, -48(%rbp)
|
||||
mov $14, %rax
|
||||
mov %rax, -40(%rbp)
|
||||
mov -40(%rbp), %rax
|
||||
push %rax
|
||||
pop %rdi
|
||||
call malloc
|
||||
mov %rax, -56(%rbp)
|
||||
mov -56(%rbp), %rcx
|
||||
mov $0, %rax
|
||||
push %rax
|
||||
mov $13, %rax
|
||||
mov %rax, %rdx
|
||||
pop %rax
|
||||
mov %rdx, %r8
|
||||
sub %rax, %r8
|
||||
inc %r8
|
||||
add %rcx, %rax
|
||||
mov %rax, -88(%rbp)
|
||||
mov %r8, -80(%rbp)
|
||||
lea -88(%rbp), %rax
|
||||
mov (%rax), %rcx
|
||||
mov 8(%rax), %rdx
|
||||
mov %rcx, -72(%rbp)
|
||||
mov %rdx, -64(%rbp)
|
||||
mov $0, %rax
|
||||
mov %rax, -96(%rbp)
|
||||
.L0:
|
||||
mov -96(%rbp), %rax
|
||||
mov %rax, %rcx
|
||||
mov -40(%rbp), %rax
|
||||
cmp %rax, %rcx
|
||||
setl %al
|
||||
movzx %al, %rax
|
||||
test %rax, %rax
|
||||
jz .L1
|
||||
mov -72(%rbp), %rcx
|
||||
mov -96(%rbp), %rax
|
||||
add %rcx, %rax
|
||||
push %rax
|
||||
mov -48(%rbp), %rcx
|
||||
mov -96(%rbp), %rax
|
||||
add %rcx, %rax
|
||||
movzbl (%rax), %eax
|
||||
pop %rcx
|
||||
mov %al, (%rcx)
|
||||
mov -96(%rbp), %rax
|
||||
mov %rax, %rcx
|
||||
mov $1, %rax
|
||||
add %rcx, %rax
|
||||
mov %rax, -96(%rbp)
|
||||
jmp .L0
|
||||
.L1:
|
||||
mov $1, %rax
|
||||
push %rax
|
||||
mov -72(%rbp), %rax
|
||||
push %rax
|
||||
mov -64(%rbp), %rax
|
||||
push %rax
|
||||
pop %rdx
|
||||
pop %rsi
|
||||
pop %rdi
|
||||
call write
|
||||
mov $0, %rax
|
||||
mov %rbp, %rsp
|
||||
pop %rbp
|
||||
ret
|
||||
mov %rbp, %rsp
|
||||
pop %rbp
|
||||
ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue