Skip to content

Commit 44833cf

Browse files
committed
サンプルプログラムの改訂
1 parent bf163ca commit 44833cf

File tree

5 files changed

+91
-94
lines changed

5 files changed

+91
-94
lines changed

resources/sample/BITCOUNT.ascs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
1-
; Bit-count
2-
; count one bits of Data and store to Count
1+
; ビットカウント
2+
; Data中の1を数え、結果をCountに格納する
3+
;
4+
; 1を数えるために1ビットだけ1が立ったマスクを使用するが、
5+
; シフト命令がないため、マスクの作成は000...001から出発して
6+
; 同じデータを加算することにより行っている。
7+
; このマスクとの論理積が1となるか、0となるかのテストによって
8+
; 1が立っているかどうかを判定し、計数する。
9+
; なお、MSBのテストのために、010...000+010...000→100...000を
10+
; 行うとオーバフロー割り込みを起こすため、MSBだけは、
11+
; あらかじめ100...000をマスクとして用意してテストに用いている。
12+
;
313
TITLE BITCOUNT
414
ORG 0x0
15+
;ループ開始、Maskによりビットの値をテストする
516
Loop LD Data
617
AND Mask
718
BZ Loop2
19+
;1ならCountを1増やす
820
LD Count
921
ADD One
1022
ST Count
23+
;15ビットまでテストしたらTestMSBへ行く
1124
Loop2 LD C
1225
SUB One
1326
BZ TestMSB
1427
ST C
28+
;Mask+Maskにより、Maskの値を1ビット左へずらす
1529
LD Mask
1630
ADD Mask
1731
ST Mask
18-
B Loop
19-
; test MSB bit
32+
B Loop ;ループの先頭に戻る
33+
; DataのMSBの値をテストする
2034
TestMSB LD Data
2135
AND MSBMask
2236
BZ End
@@ -25,11 +39,10 @@ TestMSB LD Data
2539
ST Count
2640
End HLT
2741
;
28-
C DC 15 ;loop iteration counter
29-
Mask DC 1 ;mask bits
30-
MSBMask DC 0x8000 ;mask bit for MSB
31-
Count DC 0 ;one bits' counter
32-
Data DC 0xABCD ;input data
33-
One DC 1 ;constant of one
34-
END
35-
42+
C DC 15 ;ループ計数
43+
Mask DC 1 ;マスクビット
44+
MSBMask DC 0x8000 ;MSBをテストするためのマスク
45+
Count DC 0 ;1ビットカウンタ
46+
Data DC 0xABCD ;入力データ
47+
One DC 1 ;定数1
48+
END

resources/sample/DIV.ascs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,29 @@
1-
; ���Z���s���v���O����
2-
1+
; 除算プログラム
2+
; A÷Bを計算して商をC、余りをDとする(A,B共に正の整数)
33
TITLE DIVISION
44
ORG 0x000
5-
6-
Init LD ZERO ; C��������
5+
Init LD ZERO ; Cを初期化
76
ST C
8-
9-
; A�̒l��B�̒l�Ŋ���A���ʂ�C�ɃX�g�A����
7+
;除算ループの開始
108
DivLoop LD A
11-
SUB B ; A����B������
12-
13-
; �����Z�̌��ʂ����̎��A����Z�I��
14-
BN DivEnd
15-
16-
ST A ; B��������A���X�g�A
17-
18-
; C�̒l��1���₷
9+
SUB B ; AからBを引く
10+
BN DivEnd ; 引き算の結果が負の時、割り算終了
11+
ST A ; Bを引いた結果をAに格納
12+
; 商Cの値を1増やし、DivLoopに戻る
1913
LD C
2014
ADD ONE
2115
ST C
2216
B DivLoop
23-
24-
DivEnd LD A ; A��]��ɃX�g�A
17+
DivEnd LD A ; Aを余りDに格納して終了
2518
ST D
2619
HLT
2720

28-
; ����Z�p
29-
A DC 17 ; �����鐔
30-
B DC 5 ; ���鐔
31-
C DS 1 ; ��
32-
D DS 1 ; �]��
33-
34-
; ���̑��̒萔
21+
; 割り算用
22+
A DC 17 ; 割られる数
23+
B DC 5 ; 割る数
24+
C DS 1 ; 商
25+
D DS 1 ; 余り
26+
; その他の定数
3527
ZERO DC 0
3628
ONE DC 1
37-
3829
END

resources/sample/MULT.ascs

Lines changed: 0 additions & 22 deletions
This file was deleted.

resources/sample/factorial.ascs

Lines changed: 31 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1-
; factorial of N, i.e., N!
2-
TITLE Factorial
3-
ORG 0x100
1+
; Nの階乗プログラム-メインルーチン
2+
TITLE Factorial ;プログラム名
3+
ORG 0x100 ;16進100番地から開始
44
LD N
5-
SUB One
6-
BN Error ;error as N<1
7-
BZ FOne ;F=1 as N=1
8-
9-
; compute F for N>=2
10-
LD N
11-
ST F ;F��N
12-
SUB One
13-
FLoop ST N ;N��N-1
5+
ADD Zero
6+
BN Error ; N<0 ならエラーとする
7+
; N>=0に対して、階乗の計算を開始
8+
LD One
9+
ST F ;F←1
10+
FLoop LD N ;N=0ならEndFactへ行く
11+
ADD Zero
12+
BZ EndFact
1413
LD F
15-
ST A ;A��F
14+
ST A ;AF
1615
LD N
17-
ST B ;B��N
18-
B MULT ; goto multiply routine
19-
Next LD C ; C��A*B
20-
ST F ; F��F*N
21-
LD N ;test if N=1
16+
ST B ;BN
17+
B MULT ; かけ算ルーチンへ分岐
18+
Next LD C ; CA*B
19+
ST F ; FF*N
20+
LD N ; N ← N-1
2221
SUB One
23-
BZ EndFact
24-
B FLoop
25-
EndFact HLT ;successful termination
22+
ST N
23+
B FLoop ;ループの先頭へ戻る
24+
EndFact HLT ;正常終了
2625

27-
; multiplication routine
26+
; かけ算サブルーチン-A×Bを計算してCに置く
2827
MULT LD Zero
2928
MLoop ADD A
3029
ST C
@@ -36,20 +35,16 @@ MLoop ADD A
3635
B MLoop
3736
EndMult B Next
3837

38+
; N<0のときエラー終了
39+
Error HLT ;エラー終了
3940

40-
FOne LD One
41-
ST F
42-
HLT ;successful termination
43-
44-
Error HLT ;error termination
41+
; 変数、定数を置く領域
42+
N DC 3 ;入力nを置く
43+
F DS 1 ;計算結果を置く
4544

46-
N DC 3
47-
F DS 1
48-
49-
A DS 1
50-
B DS 1
51-
C DS 1
52-
Zero DC 0
53-
One DC 1
45+
A DS 1 ;かけられる数を置く
46+
B DS 1 ;かける数を置く
47+
C DS 1 ;かけた結果を置く
48+
Zero DC 0 ;定数0
49+
One DC 1 ;定数1
5450
END
55-

resources/sample/multiply.ascs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
; A×Bを計算しCに格納する (Aは整数、B は正の整数)
2+
TITLE MULTIPLY ;プログラム名をMULTIPLY とする
3+
ORG 0x0 ;開始番地を0番地とする
4+
LD Zero ;Zero番地の0をレジスタに読み込む
5+
Loop ADD A ;レジスタにA番地の値5を加える
6+
ST C ;レジスタの値をC番地に書き込む
7+
LD B ;レジスタにB番地の値を読み込む
8+
SUB One ;レジスタからOne番地の値1を引く
9+
BZ End ;引いた結果がゼロならEndに分岐する
10+
ST B ;引いた結果をB番地に書き込む
11+
LD C ;C番地の内容をレジスタに読み込む
12+
B Loop ;Loopに戻る
13+
End HLT ;停止する
14+
15+
A DC 5 ;掛けられる数 (計算中不変)
16+
B DC 3 ;掛ける数 (1回ループを回る毎に-1)
17+
C DS 1 ;掛けた結果を残すための領域
18+
Zero DC 0 ;値(0) (計算中不変)
19+
One DC 1 ;値(1) (計算中不変)
20+
END ;プログラムの終了

0 commit comments

Comments
 (0)