File tree Expand file tree Collapse file tree 5 files changed +91
-94
lines changed
Expand file tree Collapse file tree 5 files changed +91
-94
lines changed Original file line number Diff line number Diff line change 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によりビットの値をテストする
516Loop LD Data
617 AND Mask
718 BZ Loop2
19+ ;1ならCountを1増やす
820 LD Count
921 ADD One
1022 ST Count
23+ ;15ビットまでテストしたらTestMSBへ行く
1124Loop2 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の値をテストする
2034TestMSB LD Data
2135 AND MSBMask
2236 BZ End
@@ -25,11 +39,10 @@ TestMSB LD Data
2539 ST Count
2640End 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
Original file line number Diff line number Diff line change 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+ ;除算ループの開始
108DivLoop 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+ ; その他の定数
3527ZERO DC 0
3628ONE DC 1
37-
3829 END
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 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 ;A← F
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 ;B← N
17+ B MULT ; かけ算ルーチンへ分岐
18+ Next LD C ; C← A*B
19+ ST F ; F← F*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に置く
2827MULT LD Zero
2928MLoop ADD A
3029 ST C
@@ -36,20 +35,16 @@ MLoop ADD A
3635 B MLoop
3736EndMult 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-
Original file line number Diff line number Diff line change 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 ;プログラムの終了
You can’t perform that action at this time.
0 commit comments