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

あなたは

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

アセンブラ入門内検索

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


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



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

トップ-> アセンブラ入門:4章.分岐-> 4-4.練習問題

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



4-4.練習問題

問題:キーボードから2つの1桁の数字を入力し、このかけ算の結果を表示させよ。
ヒント:
  • キーボードからの入力は下記のように行う。ただし、これは1文字分の入力であり、 数字かどうかはチェックしない。自分でチェックしなければならない。
    	mov	ah,1
    	int	21h
    
      この時点でALレジスタに入力された文字(のアスキーコード)が入る。
    
  • 入力された文字は、文字コードである。したがってこのままかけ算を行うことはできない。 文字コードを普通の数値に変換し、計算後に文字コードに戻さなくてはならない。
  • かけ算の結果「9(=39h)」を越える場合がある。この場合は2桁表示させる必要がある。

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

START:
	mov	ah,1
	int	21h		;key in
	sub	al,'0'		;文字コードから数値へ
	cmp	al,9
	ja	BYEBYE		;9より上(数字以外が入力された場合は「BYEBYE」へ飛ぶ)
	mov	bl,al

	mov	ah,2
	mov	dl,0dh
	int	21h
	mov	ah,2
	mov	dl,0ah
	int	21h		;改行

	mov	ah,1
	int	21h		;Key in
	sub	al,'0'		;文字コードから数値へ
	cmp	al,9
	ja	BYEBYE		;9より上(数字以外が入力された場合は「BYEBYE」へ飛ぶ)

	mul	bl		;かけ算の結果がAXに(1桁同士のかけ算は81以下なのでAH=0)
	mov	cl,10
	div	cl		;10で割った結果、商(10の位)がALに、余り(1の位)がAHに入る
	mov	bx,ax

	mov	ah,2
	mov	dl,0dh
	int	21h
	mov	ah,2
	mov	dl,0ah
	int	21h		;改行

	cmp	bl,0
	jz	ICHINOKURAI	;10の位が0ならばジャンプ

	mov	ah,2
	mov	dl,bl
	add	dl,'0'		;文字コードに変換
	int	21h		;10の位表示

ICHINOKURAI:
	mov	ah,2
	mov	dl,bh
	add	dl,'0'		;文字コードに変換
	int	21h		;1の位表示

BYEBYE:
	mov	ax,4c00h
	int	21h		;終了
		
	ENDS
	END	START
; 一部のコンパイラでは、
;CODE	ENDS
;	END	START
;と記述しなければいけないようです


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