トップ->アセンブラ入門

あなたは

人目のアセンブラの受講生です。

アセンブラ入門内検索

目次
アセンブラトップ
0. はじめに

1. 基礎
   1. レジスタとは
   2. セグメントとは

2. MOV命令
   1. MOV命令
   2. コンパイル
   3. 即値の転送
   4. メモリーへの転送
   5. データ定義疑似命令
   6. 練習問題

3. 算術演算
   1. 符号なし演算と符号付き演算
   2. 足し算
   3. 練習問題
   4. フラグ
   5. 引き算
   6. かけ算
   7. わり算
   8. INC,DEC

4. 分岐
   1. 無条件分離
   2. 比較命令
   3. 条件分離
   4. 練習問題
   5. ループ
   6. サブルーチン
   7. スタックとは
   8. PUSH,POP
   9. 練習問題

5. 論理演算
   1. AND命令
   2. OR命令
   3. XOR命令
   4. NOT命令
   5. NEG命令
   6. TEST命令
   7. 練習問題

6. シフト演算
   1. シフト
   2. ローテート
   3. 練習問題1
   4. 練習問題2

7. ストリング命令
   1. ストリング命令とは
   2. MOVS?
   3. REP
   4. DFの設定
   5. LODS?
   6. STOS?
   7. SCAS?
   8. CMPS?
   9 .練習問題

8. 入出力
   1. 概要
   2. IN命令
   3. OUT命令
   4. INS,OUTS命令

9. その他
   1. LEA
   2. XCHG
   3. NOP

10. 割り込み
   1. 割り込みとは
   2. ソフトウェア割り込み
   3. ハードウェア割り込み
   4. 割り込みベクター
   5. 割り込み処理の作り方
   6. 練習問題

11. レジスタの型変換(キャスト)

12. 卒業試験
   1. 卒業試験
   2. 画像データの格納形式
   3. インラインアセンブラ
   4. ネガポジ反転
   5. 明るくする、暗くする
   6. グレースケール
   7. 二値化
   8. 上下反転、左右反転
   9. 4分割
   10. モザイク
   11. シャープ
   12. ぼかし
   13. エンボス
   14. ディザ拡散
   15. 鉛筆を置いてください

13. 終わりに

文字コード

アセンブラ 〜MS-DOSの世界〜


・ このページの先頭に戻る
・ トップページに戻る



・ このページの先頭に戻る
・ トップページに戻る

トップ-> アセンブラ入門:10章.割り込み-> 10-6.練習問題

←前ページへ :  トップへ :  終わりに→



10-6.練習問題

問題
約0.99秒ごとに、'*'を1つずつ表示するプログラムを作れ。ただし、リターンキーが押されたら 終了する。
ヒント
  • DOS/V機では約55msに1回、割り込み番号8番がタイマー割り込みとして呼び出される。 約0.99秒ということは18回呼び出されるたびに'*'を表示すればよい。
  • キーボードからの入力には、CTRL+Cを押されたら終了されては困る。何か押されるまで 待ってもらっては困る。この場合はAH=6、DL=FFhの状態で「INT 21h」を実行する。もし 何も入力されていなければAL=0、入力されればALに入力文字が返ってくる。



CODE	SEGMENT
	ASSUME	DS:CODE,CS:CODE,ES:CODE,SS:CODE
	.186
	ORG	100h

START:
	mov	ax,3508h
	int	21h		;割り込みベクタ取得
	mov	VECT8_SEG,es
	mov	VECT8_OFF,bx	;割り込みベクタ保管

	push	cs
	pop	ds		;DS <= CS
	mov	dx,offset VECT8
	mov	ax,2508h
	int	21h		;割り込みベクタ設定

MAIN:
	mov	ah,6
	mov	dl,0ffh
	int	21h		;入力
	cmp	al,0dh
	jz	QUIT		;リターンキーだったら終了
	cmp	COUNT,18
	jnz	MAIN
	mov	ah,6
	mov	dl,'*'
	int	21h
	mov	COUNT,0
	jmp	short MAIN

QUIT:
	mov	ax,2508h
	mov	dx,VECT8_OFF
	mov	ds,VECT8_SEG
	int	21h		;割り込みベクタを戻す

	mov	ax,4c00h
	int	21h		;終了
;-------------------------------------
VECT8:
	cli			;割り込み禁止
	push	ax		;レジスタ保管

	inc	cs:COUNT

	mov	al,20h
	out	20h,al		;割り込みコントローラーに終わりを告げる
	pop	ax		;
	sti			;割り込みを許可する
	iret			;終了

VECT8_SEG	dw	?
VECT8_OFF	dw	?
COUNT		db	0

	ENDS
	END	START
; 一部のコンパイラでは、
;CODE	ENDS
;	END	START
;と記述しなければいけないようです


←前ページへ :  トップへ :  終わりに→