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

あなたは

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

アセンブラ入門内検索

目次
アセンブラトップ
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の世界〜


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



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

トップ-> アセンブラ入門:5章.論理演算-> 5-7.練習問題

←前ページへ :  トップへ :  次の章へ→



5-7.練習問題

  1. キーボードから1文字入力し、アルファベットならば大文字に変換して表示するプログラムを 作れ。ただしリターンキーが押されるまで繰り返す。
  2. キーボードから1文字入力し、アルファベットの大文字なら小文字に、小文字なら大文字に 変換して表示するプログラムを作れ。ただしリターンキーが押されるまで繰り返す。

ヒント
  • キーが入力されても表示されては困る(エコーバックしない)。以前紹介したが、今回も 「AH=8」を使用する。(入力文字はALに返される)
  • 'A'〜'Z'の文字コードは41h〜5Ah。'a'〜'z'の文字コードは61h〜7ah。20h分の差が ある。「SUB」命令、「ADD」命令使うの方法もあるが、今回は論理演算を用いる。
  • リターンキーが押されると、AL=0Dhが返される。


解答1:大文字に変換
CODE	SEGMENT
	ASSUME	DS:CODE,CS:CODE,ES:CODE,SS:CODE
	.186
	ORG	100h

START:
	mov	ah,8
	int	21h		;文字入力

	cmp	al,0dh
	jz	EXIT		;リターンキーなら終了

	cmp	al,'a'		;↓小文字かどうかのチェック
	jb	DISP
	cmp	al,'z'
	ja	DISP		;↑ここまで

	and	al,11011111b	;to upper charactar

DISP:
	mov	dl,al
	mov	ah,2
	int	21h		;表示

	jmp	short START

EXIT:
	mov	ax,4c00h
	int	21h		;終了

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

解答2:大文字、小文字を逆転
CODE	SEGMENT
	ASSUME	DS:CODE,CS:CODE,ES:CODE,SS:CODE
	.186
	ORG	100h

START:
	mov	ah,8
	int	21h		;文字入力

	cmp	al,0dh
	jz	EXIT		;リターンキーなら終了

	cmp	al,'A'		;↓アルファベットかどうかのチェック
	jb	DISP
	cmp	al,'Z'
	jbe	XCHANGE
	cmp	al,'a'
	jb	DISP
	cmp	al,'z'
	ja	DISP		;↑ここまで
XCHANGE:
	xor	al,00100000b	;大文字、小文字逆転

DISP:
	mov	dl,al
	mov	ah,2
	int	21h		;表示

	jmp	short START

EXIT:
	mov	ax,4c00h
	int	21h		;終了

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


←前ページへ :  トップへ :  次の章へ→