例題 (第2回目) |
次の3つのプログラムを実行し,動作確認をせよ。
例題4 2進数の印刷 DATA02番地に記憶されているデータを2進数で印刷しなさい。
;------------------------ ; 例4 2進数の印刷 ;------------------------ EX4 START LAD GR3,15 ;ループのカウンタの初期化(GR3←15 (16桁の2進数だから)) LD GR1,DATA02 ;GR1 ← (DATA02) LOOP LAD GR2,0,GR1 ;GR1をGR2に退避 AND GR1,HEX01 ;GR1と#0001との論理積を取る ADDL GR1,ZONE ;'0'との論理加算により文字コードを得る ST GR1,OUTBUF,GR3 ;GR1を(OUTBUF+GR3)番地にストア LAD GR1,0,GR2 ;GR1を復元 SRL GR1,1 ;GR1を1ビット論理右シフト LAD GR3,-1,GR3 ;GR3 ← -1 + GR3 CPA GR3,ZERO ;GR3と0を算術比較 JPL LOOP ;GR3 > 0 ならLOOPへ JZE LOOP ;GR3 = 0 ならLOOPへ OUT OUTBUF,OUTLEN ;文字を出力 RET DATA02 DC 25 ;←適当に変えてみる HEX01 DC #0001 ZONE DC '0' ZERO DC 0 OUTBUF DS 16 ;16個の領域を確保 OUTLEN DC 16 ;出力する文字列の長さ16 END
例題5 8進数の印刷 DATA08番地に記憶されているデータを8進数で印刷しなさい。
;---------------------- ; 例5 8進数の印刷 ;---------------------- EX5 START LAD GR3,5 ;ループのカウンタの初期化(GR3←5) LD GR1,DATA08 ;GR1 ← (DATA08) LOOP LAD GR2,0,GR1 ;GR1をGR2に退避 AND GR1,HEX07 ;GR1と#0007との論理積を取る ADDL GR1,ZONE ;'0'との論理加算により文字コードを得る ST GR1,OUTBUF,GR3 ;GR1を(OUTBUF+GR3)番地にストア LAD GR1,0,GR2 ;GR1を復元 SRL GR1,3 ;GR1を3ビット論理右シフト LAD GR3,-1,GR3 ;GR3 ← -1 + GR3 CPA GR3,ZERO ;GR3と0を算術比較 JPL LOOP ;GR3 > 0 ならLOOPへ JZE LOOP ;GR3 = 0 ならLOOPへ OUT OUTBUF,OUTLEN ;文字を出力 RET DATA08 DC 33 ;←適当に変えてみる HEX07 DC #0007 ZONE DC '0' ZERO DC 0 OUTBUF DS 6 ;6個の領域を確保 OUTLEN DC 6 ;出力する文字列の長さ6 END
例題6 10進数の印刷 DATA10番地に記憶されている正整数のデータを10進数で印刷しなさい。
;---------------------- ; 例6 10進数の印刷 ;---------------------- EX6 START LD GR1,DATA10 ;データをGR1にセット LAD GR3,0 ;文字列を数えるカウンタ LOOP1 LAD GR2,-1 ;商の設定 LOOP2 LAD GR2,1,GR2 ;GR2 ← 1 + GR2 SUBA GR1,C10X,GR3 ;GR1 ← (GR1)-(C10X+GR3) JPL LOOP2 ;減算結果が >0 ならばLOOP2へ JZE LOOP2 ;減算結果が =0 ならばLOOP2へ ADDA GR1,C10X,GR3 ;GR1が負になっているので(C10X + GR3)番地のデータを加算 ADDL GR2,ZONE ;GR2と'0'との論理加算により文字コードを得る ST GR2,OUTBUF,GR3 ;GR2を(OUTBUF+GR3)番地にストア LAD GR3,1,GR3 ;GR3 ← 1 + GR3 CPA GR3,F5 ;GR3と5を算術比較 JMI LOOP1 ;GR3 < 0 ならLOOP1へ OUT OUTBUF,OUTLEN ;文字を出力 RET DATA10 DC 23542 ;←適当に変えてみる C10X DC 10000,1000,100,10,1 ;連続領域 ZONE DC '0' OUTBUF DS 5 OUTLEN DC 5 F5 DC 5 END
課題 (第2回目) |
例題を参考に課題5,6のプログラムを作成せよ。
課題5 16進数の印刷 例題4のプログラムを参考にして,16進数を印刷するプログラムを作成せよ。また,Loop のデクリメントについて,どのように行われているかを説明せよ。
ヒント:2進数表示からの主な変更は次の3点
- アンドを取るのは15(=1111=#000F)
- アンドの結果が10未満ならそのまま'0'を足すことで0~9の文字コードが得られるが,それ以外(A~F)の場合にはさらに7を足す必要がある。(文字コード表で確認)
- シフトするのは4ビット
課題6 桁区切り 1. 文字コードについて説明せよ。
2. 例題6のプログラムに手を加えて3けたごとにコンマを(01,234のように)打つようにせよ。
3. Loop のインクリメントについて,どのように行われているかを説明せよ。