From 7ac339dcd755848e9820142422752fbdc8186b5c Mon Sep 17 00:00:00 2001 From: j8takagi <j8takagi@nifty.com> Date: Sat, 2 Jun 2018 16:42:30 +0900 Subject: [PATCH] =?utf8?q?casl2lib=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?utf8?q?=E3=82=92=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- as/casl2lib/.gitignore | 3 + as/casl2lib/Makefile | 23 +++++-- as/casl2lib/casl2lib.dep | 39 +++++++++++ as/casl2lib/diva.casl | 47 ++++++++++++++ as/casl2lib/doc/call.gv | 24 +++++++ as/casl2lib/inl.casl | 84 ++++++++++++++++++++++++ as/casl2lib/l2str.casl | 74 +++++++++++++++++++++ as/casl2lib/mula.casl | 42 ++++++++++++ as/casl2lib/outa.casl | 64 ++++++++++++++++++ as/casl2lib/outa_q15.casl | 59 +++++++++++++++++ as/casl2lib/outb.casl | 74 +++++++++++++++++++++ as/casl2lib/outb_w.casl | 74 +++++++++++++++++++++ as/casl2lib/outl.casl | 74 +++++++++++++++++++++ as/casl2lib/outl_q15.casl | 42 ++++++++++++ as/casl2lib/outpbm.casl | 115 ++++++++++++++++++++++++++++++++ as/casl2lib/pbm16.casl | 111 +++++++++++++++++++++++++++++++ as/casl2lib/str2l.casl | 133 ++++++++++++++++++++++---------------- 17 files changed, 1021 insertions(+), 61 deletions(-) create mode 100644 as/casl2lib/.gitignore create mode 100644 as/casl2lib/casl2lib.dep create mode 100644 as/casl2lib/doc/call.gv diff --git a/as/casl2lib/.gitignore b/as/casl2lib/.gitignore new file mode 100644 index 0000000..04dbd3d --- /dev/null +++ b/as/casl2lib/.gitignore @@ -0,0 +1,3 @@ +*.casl +doc/call.svg +sample/*.pbm diff --git a/as/casl2lib/Makefile b/as/casl2lib/Makefile index 880ba6b..1392daa 100644 --- a/as/casl2lib/Makefile +++ b/as/casl2lib/Makefile @@ -1,13 +1,26 @@ -.PHONY: install-casl2lib uninstall-casl2lib +.PHONY: all install-casl2lib uninstall-casl2lib -RMF ?= rm -f -RMDIR ?= rmdir -ECHO ?= echo -INSTALL ?= install +CAT := cat +RMF := rm -f +RMDIR := rmdir +ECHO := echo +INSTALL := install prefix ?= ~ casl2libdir ?= $(prefix)/share/casl2lib +all: stdlib.casl abs.casl addl32.casl diva.casl divl.casl inl.casl l2str.casl max.casl minim.casl mula.casl mull.casl outa.casl outa_q15.casl outb.casl outb_w.casl outl.casl outl_q15.casl outpbm.casl pbm16.casl str2l.casl + +%.casl: src/%.casl + $(CAT) $^ >$@ + +include casl2lib.dep + +clean: + +distclean: + $(RM) *.casl + install-casl2lib: *.casl $(INSTALL) -d $(casl2libdir) $(INSTALL) $^ $(casl2libdir)/ diff --git a/as/casl2lib/casl2lib.dep b/as/casl2lib/casl2lib.dep new file mode 100644 index 0000000..9bb2032 --- /dev/null +++ b/as/casl2lib/casl2lib.dep @@ -0,0 +1,39 @@ +stdlib.casl: src/stdlib.casl src/abs.casl src/addl32.casl src/diva.casl src/divl.casl src/inl.casl src/l2str.casl src/max.casl src/minim.casl src/mula.casl src/mull.casl src/outa.casl src/outa_q15.casl src/outb.casl src/outb_w.casl src/outl.casl src/outl_q15.casl src/outpbm.casl src/pbm16.casl src/rev.casl src/str2l.casl + +abs.casl: src/abs.casl + +addl32.casl: src/addl32.casl + +diva.casl: src/diva.casl divl.casl + +divl.casl: src/divl.casl + +inl.casl: src/inl.casl str2l.casl + +l2str.casl: src/l2str.casl divl.casl rev.casl + +max.casl: src/max.casl + +minim.casl: src/minim.casl + +mula.casl: src/mula.casl mull.casl + +mull.casl: src/mull.casl + +outa.casl: src/outa.casl abs.casl divl.casl + +outa_q15.casl: src/outa_q15.casl abs.casl mull.casl + +outb.casl: src/outb.casl divl.casl rev.casl + +outb_w.casl: src/outb_w.casl divl.casl rev.casl + +outl.casl: src/outl.casl divl.casl rev.casl + +outl_q15.casl: src/outl_q15.casl mull.casl + +outpbm.casl: src/outpbm.casl l2str.casl + +pbm16.casl: src/pbm16.casl outb.casl + +str2l.casl: src/str2l.casl mull.casl diff --git a/as/casl2lib/diva.casl b/as/casl2lib/diva.casl index 6796eb9..9b34690 100644 --- a/as/casl2lib/diva.casl +++ b/as/casl2lib/diva.casl @@ -39,3 +39,50 @@ FIN POP GR4 ONE DC 1 ALLON DC #FFFF END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END diff --git a/as/casl2lib/doc/call.gv b/as/casl2lib/doc/call.gv new file mode 100644 index 0000000..2579add --- /dev/null +++ b/as/casl2lib/doc/call.gv @@ -0,0 +1,24 @@ +digraph sample { + graph [shape="" style="" color="" fillcolor="" fontname="sans-serif" fontsize="12" width="2"]; + DIVA -> DIVL; + INL -> STR2L; + L2STR -> DIVL; + L2STR -> REV; + MULA -> MULL; + OUTA -> ABS; + OUTA -> DIVL; + OUTA -> REV; + OUTA_Q15 -> ABS; + OUTA_Q15 -> MULL; + OUTB -> DIVL; + OUTB -> REV; + OUTB_W -> DIVL; + OUTB_W -> REV; + OUTL -> DIVL; + OUTL -> REV; + OUTL_Q15 -> MULL; + OUTPBM -> L2STR; + PBM16 -> OUTB; + STR2L -> MULL; +} + diff --git a/as/casl2lib/inl.casl b/as/casl2lib/inl.casl index 3587131..ec8bd8b 100644 --- a/as/casl2lib/inl.casl +++ b/as/casl2lib/inl.casl @@ -20,3 +20,87 @@ ILEN DS 1 LENMAX DC 5 IBUF DS 5 END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END diff --git a/as/casl2lib/l2str.casl b/as/casl2lib/l2str.casl index a3dba83..736c888 100644 --- a/as/casl2lib/l2str.casl +++ b/as/casl2lib/l2str.casl @@ -39,3 +39,77 @@ PRT LD GR1,GR2 ; GR1ã«æååã®ã¢ãã¬ã¹ãæ ¼ç´ LEN DS 1 NCHAR DC '0123456789' END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/mula.casl b/as/casl2lib/mula.casl index 431486a..e997471 100644 --- a/as/casl2lib/mula.casl +++ b/as/casl2lib/mula.casl @@ -39,3 +39,45 @@ FIN RPOP ONE DC 1 ALLON DC #FFFF END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END diff --git a/as/casl2lib/outa.casl b/as/casl2lib/outa.casl index 6f8f84d..baf71c9 100644 --- a/as/casl2lib/outa.casl +++ b/as/casl2lib/outa.casl @@ -42,3 +42,67 @@ STR DS 17 LEN DS 1 NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' END +;;; GR1ã符å·ä»ãæ´æ°ã¨ã¿ãªãã絶対å¤ã«å¤æ +;;; å ¥å GR1: -32768ãã32767ã®æ´æ° +;;; åºå GR1: å ¥åãããæ´æ°ã®çµ¶å¯¾å¤ +;;; OF: å ¥åãããGR1ã-32768ã®å ´åã1 +;;; SF: å ¥åãããGR1ãè² æ°(-32767ã-1)ã®å ´åã1 +ABS START + AND GR1,GR1 ; GR1ã0以ä¸ã®å ´åã¯ãFINã¸ã¸ã£ã³ã + JPL FIN ; â + JZE FIN ; â + XOR GR1,ALLON ; GR1ã®ããããå転 + ADDA GR1,ONE ; GR1ã«1ã追å + JOV FIN ; è¶³ãç®ã§ãªã¼ãã¼ããã¼ã®å ´åã¯ãOF:1ãä¿æãã¦FINã¸ã¸ã£ã³ã + CPL GR1,ALLON ; SF:1ãè¨å® +FIN RET +ONE DC 1 +ALLON DC #FFFF + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END diff --git a/as/casl2lib/outa_q15.casl b/as/casl2lib/outa_q15.casl index 7c0e01c..74b1e2d 100644 --- a/as/casl2lib/outa_q15.casl +++ b/as/casl2lib/outa_q15.casl @@ -44,3 +44,62 @@ STR DS 20 LEN DS 1 END +;;; GR1ã符å·ä»ãæ´æ°ã¨ã¿ãªãã絶対å¤ã«å¤æ +;;; å ¥å GR1: -32768ãã32767ã®æ´æ° +;;; åºå GR1: å ¥åãããæ´æ°ã®çµ¶å¯¾å¤ +;;; OF: å ¥åãããGR1ã-32768ã®å ´åã1 +;;; SF: å ¥åãããGR1ãè² æ°(-32767ã-1)ã®å ´åã1 +ABS START + AND GR1,GR1 ; GR1ã0以ä¸ã®å ´åã¯ãFINã¸ã¸ã£ã³ã + JPL FIN ; â + JZE FIN ; â + XOR GR1,ALLON ; GR1ã®ããããå転 + ADDA GR1,ONE ; GR1ã«1ã追å + JOV FIN ; è¶³ãç®ã§ãªã¼ãã¼ããã¼ã®å ´åã¯ãOF:1ãä¿æãã¦FINã¸ã¸ã£ã³ã + CPL GR1,ALLON ; SF:1ãè¨å® +FIN RET +ONE DC 1 +ALLON DC #FFFF + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END diff --git a/as/casl2lib/outb.casl b/as/casl2lib/outb.casl index 7ecb73e..dd1ebaa 100644 --- a/as/casl2lib/outb.casl +++ b/as/casl2lib/outb.casl @@ -35,3 +35,77 @@ NCHAR DC '01' SPC DC ' ' DIG DC 16 END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/outb_w.casl b/as/casl2lib/outb_w.casl index d64bff6..cf709d6 100644 --- a/as/casl2lib/outb_w.casl +++ b/as/casl2lib/outb_w.casl @@ -41,3 +41,77 @@ NCHAR DC '01' SPC DC ' ' DIG DC 31 END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/outl.casl b/as/casl2lib/outl.casl index a2967d8..bf16e79 100644 --- a/as/casl2lib/outl.casl +++ b/as/casl2lib/outl.casl @@ -34,3 +34,77 @@ STR DS 17 ; 符å·ä»ã2鲿°ã§è¡¨è¨ããå ´åãæ³ LEN DS 1 NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/outl_q15.casl b/as/casl2lib/outl_q15.casl index 2ae4b25..0355a6f 100644 --- a/as/casl2lib/outl_q15.casl +++ b/as/casl2lib/outl_q15.casl @@ -27,3 +27,45 @@ PRT ST GR4,LEN ; LEN <- GR4 STR DS 20 LEN DS 1 END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END diff --git a/as/casl2lib/outpbm.casl b/as/casl2lib/outpbm.casl index 70803c3..146e89a 100644 --- a/as/casl2lib/outpbm.casl +++ b/as/casl2lib/outpbm.casl @@ -34,3 +34,118 @@ WIDTH DS 32 SPC DC ' ' HEIGHT DS 1 WHLEN DS 1 +;;; GR1ã«æ ¼ç´ããã符å·ãªãæ´æ°ãæååã«å¤æãã +;;; GR2ã«æååã®å é ã¢ãã¬ã¹ãGR3ã«æååã®é·ããè¿ã +;;; ä¾åããã°ã©ã : DIVL, REV +L2STR START + PUSH 0,GR1 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0 <- 0 + LD GR4,GR2 ; GR4 <- GR2 + AND GR1,GR1 ; GR1ããã¹ã + JZE ZERO ; GR1ã0ã®å ´åãZEROã«ã¸ã£ã³ã + PUSH 0,GR2 +STI CPL GR1,GR2 ; ã«ã¼ãå é ã(GR1 < GR2)ã®å ´åã¯ãã«ã¼ãè±åº + JMI STLST ; â + LAD GR2,10 ; GR2ã«10鲿°ã®ã10ããæ ¼ç´ã + CALL DIVL ; GR1ã¨GR2ã®ãåãGR0ãå°ä½ãGR3ã«æ ¼ç´ + LD GR1,GR3 ; GR1ã«GR3ãã³ãã¼ + LD GR1,NCHAR,GR1 ; GR1ãæåã«å¤æ + ST GR1,0,GR4 ; (GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + LD GR1,GR0 ; GR0ãGR1ã«ã³ãã¼ + JUMP STI ; ã«ã¼ãçµç«¯ +STLST POP GR2 + LD GR1,NCHAR,GR1 ; GR1ãæåã«å¤æ + ST GR1,0,GR4 ; (GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP PRT ; PRTã«ã¸ã£ã³ã +ZERO LD GR1,NCHAR ; ã0ããSTRé åã«æ ¼ç´ + ST GR1,0,GR4 ; â (GR4) <- GR1 + LAD GR4,1,GR4 ; â GR4 <- GR4 + 1 +PRT LD GR1,GR2 ; GR1ã«æååã®ã¢ãã¬ã¹ãæ ¼ç´ + SUBL GR4,GR2 ; GR2 <- GR4 - GR2 + LD GR2,GR4 ; â + CALL REV ; æååãéé ã«ä¸¦ã¹æ¿ã + LD GR3,GR2 ; GR3ã«æååã®é·ããæ ¼ç´ + LD GR2,GR4 ; GR2ã«æååã®ã¢ãã¬ã¹ãæ ¼ç´ + POP GR4 + POP GR1 + RET +LEN DS 1 +NCHAR DC '0123456789' + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/pbm16.casl b/as/casl2lib/pbm16.casl index 39671ca..e615f35 100644 --- a/as/casl2lib/pbm16.casl +++ b/as/casl2lib/pbm16.casl @@ -29,3 +29,114 @@ L2LEN DC 5 HEIGHT DC 16 BEG DS 1 END +;;; GR1ã«æ ¼ç´ãããå¤ãã2鲿°å¤ã¨ãã¦è¡¨ç¤º +OUTB START + RPUSH + LD GR2,BIN ; GR2ã«2鲿°ã®ã2ããæ ¼ç´ã + XOR GR4,GR4 ; GR4: 2鲿°å¤ã®é·ã +STI CPL GR1,GR2 ; ã«ã¼ãå é ã(GR1 < GR2)ã®å ´åã¯ãã«ã¼ãè±åº + JMI STLST ; â + CALL DIVL ; GR1ã¨GR2ã®ãåãGR0ãå°ä½ãGR3ã«æ ¼ç´ + LD GR1,GR3 ; GR1ã«GR3ãã³ãã¼ + LD GR1,NCHAR,GR1 ; GR1ãæåã«å¤æ + ST GR1,STR,GR4 ; (STR + GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + LD GR1,GR0 ; GR0ãGR1ã«ã³ãã¼ + JUMP STI ; ã«ã¼ãçµç«¯ +STLST LD GR1,NCHAR,GR1 ; GR1ãæåã«å¤æ + ST GR1,STR,GR4 ; (STR + GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 +EMLOOP CPL GR4,DIG ; ã«ã¼ãå é ã(GR4 = DIG)ã®å ´åã¯ãã«ã¼ãè±åº + JZE PRT ; â + LD GR1,NCHAR ; GR1 <- NCHAR:'0' + ST GR1,STR,GR4 ; (STR + GR4) <- GR1 + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP EMLOOP ; ã«ã¼ãçµç«¯ +PRT ST GR4,LEN ; LEN <- GR4 + LD GR2,LEN ; GR2ã«LENã®å¤ãæ ¼ç´ + LAD GR1,STR ; GR1ã«æååã®ã¢ãã¬ã¹ãæ ¼ç´ + CALL REV ; æååãéé ã«ä¸¦ã¹æ¿ã + OUT STR,LEN ; æååãåºå + RPOP + RET +STR DS 17 +LEN DS 1 +BIN DC 2 +NCHAR DC '01' +SPC DC ' ' +DIG DC 16 + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®å²ç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«é¤æ° GR2:餿° +;;; åºå GR0:å GR3:å°ä½ +;;; (GR2 = 0)ã®å ´åãGR0 GR3ã¨ã0ã«ãªãããªã¼ãã¼ããã¼ +DIVL START + PUSH 0,GR1 + PUSH 0,GR2 + PUSH 0,GR4 + XOR GR0,GR0 ; GR0:å åæå + XOR GR3,GR3 ; GR3:å°ä½ åæå + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãDIVZEROã¸ã¸ã£ã³ã + JZE DIVZERO ; â + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + JZE FIN ; â + ST GR2,Y ; Yã«GR2ã®åæå¤ãä¿å + LAD GR4,1 ; GR4:対象ãããã®ã¤ã³ããã¯ã¹ åæå +SL CPL GR2,GR1 ; ã«ã¼ãå é ã(GR2 > GR1)ã®å ´åãLOOPã¸ã«ã¼ãè±åº + JPL LOOP ; â + SLL GR4,1 ; GR4ã1åå·¦ã·ãã + ST GR2,TMP ; GR2ã®å¤ãTMPã«éé¿ + SLL GR2,1 ; GR2ã1åå·¦ã·ãã + JOV YOV ; ãªã¼ãã¼ããã¼ã®å ´åã¯ãYOVã¸ã¸ã£ã³ã + JUMP SL ; ã«ã¼ãçµç«¯ +YOV LD GR2,TMP ; GR2ã®å¤ãTMPãã復å + SRL GR4,1 ; GR4ã1åå³ã·ãã + JUMP LPIN ; LPINã¸ã¸ã£ã³ã +LOOP SRL GR4,1 ; ã«ã¼ãå é ãGR4ã1åå³ã·ãã + JZE SETMOD ; (GR4 = 0)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + SRL GR2,1 ; GR2ã1åå³ã·ãã + CPL GR1,Y ; (GR1 < Y)ã®å ´åãSETMODã¸ã«ã¼ãè±åº + JMI SETMOD ; â + CPL GR1,GR2 ; (GR1 < GR2)ã®å ´åãã«ã¼ãå é ã¸ã¸ã£ã³ã + JMI LOOP ; â +LPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2 + ADDL GR0,GR4 ; GR0 <- GR0 + GR4 + JUMP LOOP ; ã«ã¼ãçµç«¯ +DIVZERO LAD GR3,#8000 ; å¼·å¶çã«ãªã¼ãã¼ããã¼ãçºçãããGR3 <- 0 + SLL GR3,1 ; â + JUMP FIN ; FIN ã¸ã¸ã£ã³ã +SETMOD LD GR3,GR1 ; GR3 <- GR1ãå°ä½ã®è¨å® +FIN POP GR4 + POP GR2 + POP GR1 + RET +Y DS 1 +TMP DS 1 + END +;;; ã¡ã¢ãªã¼ä¸ã«ããæå®ãããã¢ãã¬ã¹ãé·ãã®æååãéé ã«ä¸¦ã¹æ¿ãã +;;; ä¾: 12345 -> 54321ã54321- -> -12345 +;;; å ¥å GR1:æååã®ã¢ãã¬ã¹ GR2:æååã®é·ã +;;; åºå ï¼åä¸ï¼ +REV START + RPUSH + LAD GR3,0 ; GR3ã®åæå +PU CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE NEXT ; â + LD GR4,GR1 ; GR4 <- GR1 + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + LD GR5,0,GR4 ; GR5 <- GR4ã¢ãã¬ã¹ã®å¤ + PUSH 0,GR5 ; GR5ãããã·ã¥ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PU ; ã«ã¼ãçµç«¯ +NEXT LAD GR3,0 ; GR3ã®åæå +PO CPL GR3,GR2 ; ã«ã¼ãå é ã(GR3 = GR2)ã®å ´åãã«ã¼ãè±åº + JZE FIN ; â + POP GR5 ; GR5ã«ããã + LD GR4,GR1 ; GR4ã«GR1ã®å¤ãã³ãã¼ + ADDL GR4,GR3 ; GR4 <- GR4 + GR3 + ST GR5,0,GR4 ; GR4ã®ã¢ãã¬ã¹ <- GR5ã®å¤ + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP PO ; ã«ã¼ãçµç«¯ +FIN RPOP + RET + END diff --git a/as/casl2lib/str2l.casl b/as/casl2lib/str2l.casl index 1394131..591ef66 100644 --- a/as/casl2lib/str2l.casl +++ b/as/casl2lib/str2l.casl @@ -1,63 +1,84 @@ -;;; 10鲿°ã®æ´æ°ã表ãæååãæ°å¤ã«å¤æ -;;; æ°å¤ã®ç¯å²ã¯ã0ãã65535 -;;; å ¥å GR1: æååãæ ¼ç´ããã¢ãã¬ã¹ -;;; GR2: æååã®é·ããæå¤§5ãã -;;; åºå GR0: æ°å¤ -;;; æååãæå¤§é·ãã大ããå ´åãæ°å¤ä»¥å¤ã®å ´åã¯ãGR0ã¯#FFFFãOFã¯1 -;;; ä¾åããã°ã©ã : MULL -STR2L START +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START PUSH 0,GR4 PUSH 0,GR5 - XOR GR0,GR0 ; GR0:åæå - AND GR2,GR2 ; (GR2 = 0)ã®å ´åãFINã¸ã¸ã£ã³ã + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº JZE FIN ; â - CPL GR2,MAXLEN ; (GR2 > MAXLEN)ã®å ´åãLENOVã¸ã¸ã£ã³ã - JPL LENOV ; â - ST GR1,STR ; STR <- GR1 æååã®éå§ã¢ãã¬ã¹ - ST GR2,LEN ; LEN <- GR2 - LAD GR2,10 ; GR2:10鲿°ã®ã10ã - XOR GR4,GR4 ; GR4:å¤ã®ä¸ææ ¼ç´ - XOR GR5,GR5 ; GR5:ã¤ã³ããã¯ã¹ -STOL CPL GR5,LEN ; ã«ã¼ãå é ã(GR5 = LEN)ã®å ´åãã«ã¼ãè±åº - JZE CP ; â - LD GR1,STR ; GR1ã«ãå ¥åæååä¸ã®æ¬¡ã®æ¡ãæ ¼ç´ - ADDL GR1,GR5 ; â - LD GR1,0,GR1 ; â - CPL GR1,ZERO ; (GR1 < '0')ã®å ´åãNANã¸ã¸ã£ã³ã - JMI NAN ; â - CPL GR1,NINE ; (GR1 > '9')ã®å ´åãNANã¸ã¸ã£ã³ã - JPL NAN ; â - SUBL GR1,ZERO ; GR1ã®æåãã対å¿ããæ°å¤ã«å¤æ - ST GR5,NLEN ; GR5 <- LEN - NLEN - 1 - LD GR5,LEN ; â - SUBA GR5,NLEN ; â -MUL10 CPA GR5,=1 ; ã«ã¼ãå é ãGR1 <- 10 ** GR5 - JZE NEXT ; (GR5 = 1)ã®å ´åãã«ã¼ãè±åº - JMI NEXT ; â - CALL MULL ; MULLãå¼ã³åºããGR0 <- GR1 * GR2 - JOV FIN ; â ãªã¼ãã¼ããã¼æã¯ãããã°ã©ã çµç«¯ã¸ã¸ã£ã³ã - LD GR1,GR0 ; GR1 <- GR0 - LAD GR5,-1,GR5 ; GR5 <- GR5 -1 - JUMP MUL10 ; ã«ã¼ãçµç«¯ã¸ã¸ã£ã³ã -NEXT LD GR5,NLEN ; GR5 <- NLENã復å - ADDL GR4,GR1 ; GR4 <- GR4 + GR1 - JOV FIN ; â - LAD GR5,1,GR5 ; GR5 <- GR5 + 1 - JUMP STOL ; ã«ã¼ãçµç«¯ -NAN LAD GR2,#FFFF ; GR2 <- #FFFF - JUMP FIN ; FINã¸ã¸ã£ã³ã -CP LD GR1,GR4 ; GR0 <- GR4 - LD GR0,LEN ; GR0 <- LEN - JUMP FIN ; ããã°ã©ã çµç«¯ã¸ã¸ã£ã³ã -LENOV LAD GR0,#FFFF ; æååãæå¤§é·ãã大ããå ´åãGR0 <- #FFFF - SRA GR0,1 ; â ãªã¼ãã¼ããã¼çºç + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â +FIN POP GR5 + POP GR4 + RET + END +;;; 0ã65535ã®ç¯å²ã«ããæ£æ°ã®ããç®ï¼çç®æ¹å¼ï¼ãè¡ã +;;; å ¥å GR1:è¢«ä¹æ° GR2:乿° +;;; åºå GR0:ç©ã®ä¸ä½WORD GR3:ç©ã®ä¸ä½WORD +;;; ç©ã65535ãã大ããå ´åã¯ããªã¼ãã¼ããã¼ +MULL START + PUSH 0,GR4 + PUSH 0,GR5 + XOR GR0,GR0 ; ç© + XOR GR3,GR3 ; ä¸ä½word + XOR GR5,GR5 ; ä¸ä½wordã®ä¸æå¤ + AND GR1,GR1 ; (GR1 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + AND GR2,GR2 ; (GR2 = 0)ã®å ´åãçµäº + JZE CHKOV ; â + LAD GR4,1 ; 対象ããã +LOOP PUSH 0,GR4 ; ã«ã¼ãå é ãGR2ã®ãããä¸ã§GR4ã示ããããã0ã®å ´åãNEXTã¸ã¸ã£ã³ã + AND GR4,GR2 ; â + POP GR4 ; â + JZE NEXT1 ; â + ADDL GR3,GR5 ; GR3 <- GR3 + GR5 + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV AHB1 ; GR0ããªã¼ãã¼ããã¼ããå ´åãAHB1ã¸ã¸ã£ã³ã + JUMP NEXT1 ; â +AHB1 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 +NEXT1 SLL GR4,1 ; GR4ã1åå·¦ã·ãã + JOV CHKOV ; â + SLL GR5,1 ; GR5ã1åå·¦ã·ãã + CPL GR4,GR2 ; (GR4 > GR2)ã®å ´åãCHKOVã¸ã¸ã£ã³ã + JPL CHKOV ; â + SLL GR1,1 ; GR1ã1åå·¦ã·ãã + JOV AHB2 ; GR1ããªã¼ãã¼ããã¼ããå ´åãAHBã¸ã¸ã£ã³ã + JUMP NEXT2 ; â +AHB2 LAD GR5,1,GR5 ; GR5 <- GR5 + 1 +NEXT2 JUMP LOOP ; ã«ã¼ãçµç«¯ +CHKOV AND GR3,GR3 ; GR3 = 0ã®å ´åãçµäº + JZE FIN ; â + LAD GR4,#FFFF ; GR3 <> 0ã®å ´åããªã¼ãã¼ããã¼ + SLL GR4,1 ; â FIN POP GR5 POP GR4 RET -ZERO DC '0' -NINE DC '9' -MAXLEN DC 5 ; æååã®æå¤§é· -STR DS 1 -LEN DS 1 -NLEN DS 1 END -- 2.18.0