LoginSignup
0
0

More than 5 years have passed since last update.

H26年春期 基本情報技術者 午後問12 解説 設問1

Last updated at Posted at 2016-03-28
MAIN    START
        LAD   GR1,BUF
        LAD   GR2,BUF2
        CALL  GETTKN
        RET
BUF     DC    '  THIS 1234  99#AB* .'
BUF2    DS    30

GETTKN  START
        RPUSH
        LD    GR3,=-1         ; 単語種別の初期化
        LAD   GR1,-1,GR1      ; 先頭文字のアドレス - 1
LP      LAD   GR1,1,GR1       ; 次の文字のアドレスをGR1に設定
        LD    GR4,0,GR1       ; 文字を取り出す
        CPL   GR4,='.'        ; 最終記号?
        JZE   FIN             ; 最終記号の場合 FIN へ
        CPL   GR4,=' '        ; 空白間隔?
        JNZ   ALNUM           ; 空白でない場合 ALNUM へ
        CALL  SETTKN          ; 単語管理テーブル設定処理へ
        JUMP  LP              ; 次の文字処理へ

ALNUM   LD    GR3,GR3         ; 単語の処理中?
        JPL   LP              ; 処理中の単語が英字を含む場合は LP ヘ
        JZE   ACHK            ; 処理中の単語が数字だけから成る場合は ACHK ヘ
        LD    GR3,=0          ; 次の単語の処理開始、単語種別を“数字だけから成る”に設定
        LD    GR6,GR1         ; 先頭アドレスを退避
ACHK    CPL   GR4,='9'        ; 数字最大値
        JPL   NEXT            ; 数字最大値より大きい、即ち英字を含む場合は NEXT へ
        CPL   GR4,='0'        ; 数字最小値
        JMI   NEXT            ; 数字最小値より小さい、即ち英字を含む場合は NEXT へ
        JUMP  LP              ; 取り出した文字が数字の場合は LP ヘ

NEXT    LD    GR3,=1          ; 単語種別を“英字を含む”に設定
        JUMP  LP              ; 取り出した文字が英字の場合は LP ヘ

FIN     CALL  SETTKN          ; 単語管理テーブル設定処理へ
        LD    GR5,=-1         ; 終端マーク
        ST    GR5,0,GR2       ; 終端マークを単語管理テーブルに格納
        RPOP
        RET

SETTKN  LD    GR3,GR3         ; 単語の処理中?
        JMI   FIN2            ; GR3 = -1: 単語処理中でなければ何もしない
        ST    GR6,0,GR2       ; 退避した単語の先頭アドレスをGR2に格納
        LD    GR5,GR1         ; GR1のアドレスをGR5に格納
        SUBL  GR5,GR6         ; 単語最終文字のアドレス - 先頭アドレス
        ST    GR5,1,GR2       ; 単語の長さを格納
        ST    GR3,2,GR2       ; 単語の種別を格納
        LD    GR3,=-1         ; 単語種別を初期化(処理中状態を解除)
        LAD   GR2,3,GR2       ; 次の単語のアドレスを取得
FIN2    RET
        END

出力結果

GR1,文字,ASCII
1007,△,20,
1008,△,20,
1009,T,54
100A,H,48
100B,I,49
100C,S,53
100D,△,20
100E,1,31
100F,2,32
1010,3,33
1011,4,34
1012,△,20
1013,△,20
1014,9,39
1015,9,39
1016,#,23
1017,A,41
1018,B,42
1019,*,2A
101A,△,20
101B,.,2E

GR2
アドレス,(単語先頭アドレス,長さ,種類)
101C,1009
101D,4
101E,1
101F,100E
1020,4
1021,0
1022,1014
1023,6
1024,1
1025,FFFF
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0