1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

アセンブリ言語(CASL2)を学習#2

Posted at

#はじめに
 前回に引き続きCASL2をやっていきます。今回は簡単な演算をやります。
#CASL2について
COMET2は1語(ひとつのデータ)を16ビットとし、#0000~#FFFF(0~65535)まで表すことができます。また、命令語は2語長で32ビット構成です。
#2の補数表現について
 2の補数でマイナスの表現ができます。
 2の補数とはビット反転し1を加えた値のことを言います。
  例)-9を2の補数表現で表す。
   9 = (1001)₂
   ビット反転すると (0110)₂
   さらに1を加えて (0111)₂
   よって-9 = (0111)₂
#コード1(ADDA命令,SUBA命令)

PULAS.cas
PULAS     START                  ;プログラムの開始
          LD      GR0, DATA1     ;GR0にDATA1を格納
          ADDA    GR0, DATA2     ;GR0にGR0+DATA2を格納    
          ST      GR0, KOTAEA    ;KOTAEAにGR0を格納
          RET
DATA1     DC      #FFFF          
DATA2     DC      1         
KOTAEA    DS      1              ;データ領域の確保
KOTAES    DS      1              
          END

##LD命令、ST命令
 LD命令はメモリから凡用レジスタにデータを格納します。
 ST命令は凡用レジスタからメモリにデータを格納します。
 いずれの場合も、オペランドはレジスタとアドレスです。
##DS命令
 DS命令はオペランドで指定した値の分だけデータ領域を確保します。
##ADDA命令、SUBA命令
指定したレジスタとアドレスの値を足して(引いて)レジスタに格納します。
ADDA命令、SUBA命令では最上位ビットを符号として表します。
そのため #FFFF=-1 となるため上のコードでは 
GR0 = #FFFF(-1) + #0001(1) = 0 となります。
#コード2(ADDL命令,SUBL命令)

PURAS.cas
PULAS     START                  ;プログラムの開始
          LD      GR0, DATA1     ;GR0にDATA1を格納
          ADDL    GR0, DATA2     ;GR0にGR0+DATA2を格納    
          ST      GR0, KOTAEA    ;KOTAEAにGR0を格納
          RET
DATA1     DC      #FFFF          
DATA2     DC      1         
KOTAEA    DS      1              ;データ領域の確保
KOTAES    DS      1              
          END

##ADDL命令、SUBL命令
 指定したレジスタとアドレスの値を足して(引いて)レジスタに格納します。
ただし、ADDL命令、SUBL命令は符号なしで考えます。
そのため、#FFFF = 65535(2¹⁶-1) となり、上のコードでは
GR0 = #FFFF(65535) + #0001(1) = #10000(65536) となります。
ひとつのデータは16ビットであるのでオーバーフローとなります。
なので、GR0は0、OFに1が格納されます。

#コード(AND命令、OR命令、XOR命令)

LOGIC.cas
LOGIC     START
          LD      GR0, DATA
          AND     GR0, DATA2
          RET
DATA      DC      13
DATA2     DC      8
          END

##AND命令
 指定したレジスタとアドレスの値で論理積を行い、レジスタに格納します。
DATA,DATA2を2進数で表すと 13 = (1101)₂、8 = (1000)₂ となります。
よって GR0 = (1000)₂ = 8 となります。
論理和、排他的論理和も同様になります。

#終わり
 #~は16進数、(~)₂は2進数をあらわします。次回は分岐条件をやろうと思います。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?