Advertisement
Davi0k

link.asm

Sep 16th, 2022
2,562
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.05 KB | None | 0 0
  1.     .data
  2. memory: .asciiz " - Total list capacity (bytes): "
  3.    
  4. capacity: .word 16
  5.  
  6. counter: .word 24
  7.    
  8.     .globl main
  9.    
  10.     .text
  11. macros:
  12.     .macro print_int(%reg)
  13.         li $v0 1
  14.         move $a0 %reg
  15.         syscall
  16.     .end_macro
  17.    
  18.     .macro print_string(%label)
  19.         li $v0 4
  20.         la $a0 %label
  21.         syscall
  22.     .end_macro
  23.    
  24.     .macro print_character(%character)
  25.         li $v0 11
  26.         li $a0 %character
  27.         syscall
  28.     .end_macro
  29.    
  30.     .macro terminate
  31.         li $v0 10
  32.         syscall
  33.     .end_macro
  34.    
  35.     .macro push_and_print(%reg)
  36.         move $a0 $s0
  37.         move $a1 %reg
  38.         jal push
  39.        
  40.         move $a0 $s0
  41.         jal print
  42.     .end_macro
  43. main:
  44.     la $a0 capacity
  45.     lw $a0 0($a0)
  46.     move $a1 $zero
  47.     jal allocate
  48.    
  49.     move $s0 $v0
  50.    
  51.     la $s2 counter
  52.     lw $s2 0($s2)
  53.    
  54.     li $s1 0
  55. count:
  56.     addi $s1 $s1 1
  57.     push_and_print($s1)
  58.     blt $s1 $s2 count
  59.        
  60.     terminate
  61.    
  62. #region allocate
  63. allocate:
  64.     move $t0 $a0
  65.  
  66.     li $v0 9
  67.     addi $a0 $a0 12
  68.     syscall
  69.    
  70.     sw $t0 0($v0)
  71.    
  72.     sw $a1 4($v0)
  73.    
  74.     jr $ra
  75. #endregion
  76.    
  77. #region push
  78. push:
  79.     move $t0 $a0
  80. initial:
  81.     lw $t1 0($t0)
  82.     lw $t2 4($t0)
  83.    
  84.     addi $t5 $t0 12
  85.    
  86.     bne $t1 $t2 skip
  87.  
  88.     lw $t3 8($t0)
  89.  
  90.     bnez $t3 next
  91.    
  92.     move $t8 $fp
  93.     addi $fp $sp -4
  94.     sw $t8 0($fp)
  95.     sw $sp -4($fp)
  96.     sw $t0 -8($fp)
  97.     sw $a1 -12($fp)
  98.     sw $ra -16($fp)
  99.     addi $sp $fp -16
  100.    
  101.     move $a0 $t1
  102.     move $a1 $zero
  103.     jal allocate
  104.    
  105.     lw $t8 0($fp)
  106.     lw $sp -4($fp)
  107.     lw $t0 -8($fp)
  108.     lw $a1 -12($fp)
  109.     lw $ra -16($fp)
  110.     move $fp $t8
  111.    
  112.     sw $v0 8($t0)
  113.    
  114.     move $t0 $v0
  115.    
  116.     j initial
  117. next:
  118.     move $t0 $t3
  119.    
  120.     j initial
  121.    
  122. skip:
  123.     add $t5 $t5 $t2
  124.     sw $a1 0($t5)
  125.     addi $t2 $t2 4
  126.     sw $t2 4($t0)
  127.     jr $ra
  128. #endregion
  129.    
  130. #region print
  131. print:
  132.     move $t0 $a0
  133.    
  134.     li $t7 0
  135.  
  136. start:
  137.     addi $t5 $t0 12
  138.     lw $t1 0($t0)
  139.    
  140.     add $t7 $t7 $t1
  141.    
  142.     li $t3 0
  143. loop:
  144.     beq $t3 $t1 full
  145.     add $t4 $t5 $t3
  146.     lw $t2 0($t4)
  147.    
  148.     print_character('[')
  149.    
  150.     print_int($t2)
  151.    
  152.     print_character(']')
  153.    
  154.     addi $t3 $t3 4
  155.    
  156.     j loop
  157. full:
  158.     lw $t6 8($t0)
  159.    
  160.     beqz $t6 stop
  161.    
  162.     print_character(' ')
  163.    
  164.     move $t0 $t6
  165.    
  166.     j start
  167. stop:
  168.     print_string(memory)
  169.    
  170.     print_int($t7)
  171.  
  172.     print_character('\n')
  173.    
  174.     jr $ra
  175. #endregion
  176.  
Tags: Script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement