X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fmisc%2Fsum_2.casl;fp=as%2Fmisc%2Fsum_2.casl;h=6ef8c10e0346b16f589755624d5b165349efb856;hp=0000000000000000000000000000000000000000;hb=05965ee87822b44616998d347d8f91fbf550eb2e;hpb=e53b9aa2cd0e67ff64c52fa1b83e16c048283dbd diff --git a/as/misc/sum_2.casl b/as/misc/sum_2.casl new file mode 100644 index 0000000..6ef8c10 --- /dev/null +++ b/as/misc/sum_2.casl @@ -0,0 +1,26 @@ +;;; sum_10.casl +;;; 入力 GR0: 正数 +;;; 出力 GR0: 1からGR1で指定された値までの正数をすべて加算した値。 +;;; オーバーフローした場合は、0 +;;; 依存プログラム: mull1.casl divl1.casl +MAIN START + PUSH 0,GR1 + PUSH 0,GR2 + ADDL GR1,FST ; GR1 <- (初項 + 末項) + PUSH 0,GR1 ; GR1を退避 + LD GR1,LST ; GR1 <- (末項 - 初項) + SUBL GR1,FST ; ↓ + LD GR2,GR1 ; ↓ + LD GR2,STEP ; GR2 <- STEP + CALL DIVL ; GR0 <- GR1 / GR2 + LD GR2,GR0 ; GR2 <- GR0 + LAD GR2,1,GR2 ; GR2 <- GR2 + 1 + SRL GR2,1 ; GR2 <- GR2 / 2 + POP GR1 ; GR1を復元 + CALL MULL ; GR0 <- GR1 * GR2 + POP GR2 + POP GR1 + RET +FST DC 1 ; 初項 +STEP DC 1 ; 公差 + END