Drkcore

23 10 2009 SPIM Tweet

アセンブリ言語での局所変数

局所変数とはスタック上に確保されたものであり.globlで指定されるものとは異なる。

100までの総和を局所変数を使ってもとめる

int main()
{
  print_int(sum(10));
  print_string("\n");
  return 0;
}

int sum(int n)
{
  int s;
  s = 0;
  while(n>0){
    s = s + n;
    n = n - 1;
  }
  return s;
}

関数後ごとにスタックを設定してsum2で$v0に結果を書き込んで、mainの

move $a0, $v0

で返り値を受ける。

        .data

_s1:    .asciiz "\n"

        .text
        .globl main
main:
        addiu $sp, $sp, -24
    sw    $ra, 20($sp)
    sw    $fp, 16($sp)
    move  $fp, $sp

    li    $a0, 100
    jal   sum
    move  $a0, $v0
    li    $v0, 1
    syscall

    la    $a0, _s1
    li    $v0, 4
    syscall

    li    $v0, 0
    move  $sp, $fp
    lw    $ra, 20($sp)
    lw    $fp, 16($sp)
    addiu $sp, $sp, 24
    jr    $ra

sum:
    addiu $sp, $sp, -12
    sw    $ra, 8($sp)
    sw    $fp, 4($sp)
    move  $fp, $sp

    sw    $zero, 0($fp)

_sum_1:
    slt   $t0, $zero, $a0
    beq   $t0, $zero, _sum_2

    lw    $t1, 0($fp)
    add   $t1, $t1, $a0
    sw    $t1, 0($fp)

    addi  $a0, $a0, -1

    b     _sum_1

_sum_2:
    lw    $v0, 0($fp)
    move  $sp, $fp
    lw    $ra, 8($sp)
    lw    $fp, 4($sp)
    addiu $sp, $sp, 12
    jr    $ra

ProductName Cとアセンブリ言語で学ぶ計算機プログラミングの基礎概念 - プログラムはプロセッサ上でどのように実行されるのか
角川 裕次
森北出版 / ¥ 5,040 ()
在庫あり。

18章終了

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021