Merge branch 'master' of dragon:/home/dav/yacasl2
[YACASL2.git] / as / casl2lib / minim.casl
index f1198da..83d973f 100644 (file)
@@ -1,19 +1,23 @@
-;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
+;;; 複数のWORD値の中から、最小値を返す
+;;; 入力: GR1: WORD値を格納したアドレス GR2: 値の個数
+;;; 出力: GR0: 最小値
 MINIM   START
-        LD      GR0,0,GR1
-        ST      GR0,MIN
-        LAD     GR3,0
-S1      CPA     GR3,GR2
-        JZE     LRET
-        LAD     GR1,1,GR1
-        LD      GR0,0,GR1
-        CPA     GR0,MIN
-        JPL     S2
-        JZE     S2
-        ST      GR0,MIN
-S2      LAD     GR3,1,GR3
-        JUMP    S1
-LRET    LD      GR0,MIN
+        RPUSH
+        LD      GR0,0,GR1       ; MIN <- GR1アドレスの値
+        ST      GR0,MIN         ; ↓
+        LAD     GR3,0           ; GR3:インデックス 初期化
+S1      CPA     GR3,GR2         ; ループ先頭。(GR2 = GR3)の場合、終了
+        JZE     RET             ; ↓
+        LAD     GR1,1,GR1       ; GR1 <- GR1 + 1
+        LD      GR0,0,GR1       ;
+        CPA     GR0,MIN         ;
+        JPL     S2              ;
+        JZE     S2              ;
+        ST      GR0,MIN         ;
+S2      LAD     GR3,1,GR3       ;
+        JUMP    S1              ;
+RET     LD      GR0,MIN         ;
+        RPOP
         RET
-MIN     DS      1
+MIN     DS      1               ; 最小値を格納
         END