命令語 ADDL: ADD Logical (add:加える logical:論理的な) 役割 符号無し整数の足し算を行う命令. 書式 教科書(p.48)の通り. 機能 教科書(p.48)の通り. フラグレジスタ 教科書(p.49)の通り.
符号無し整数の演算を行うということは,全て正として取り扱う.それなのに,フラグレ ジスタのSFが1になることに対して,疑問に思うだろう.それについては,教科書の 例題で説明する.
ADDL GR0,GR1 ;GR0←GR0+GR1
ADDL GR0,A ;GR0←GR0+(アドレスAの内容)
ADDL GR0,A,GR1 ;GR0←GR0+(アドレス[A+GR1]の内容)
ADDL GR0,=5 ;GR0←GR0+5
教科書の例題を実行したときのメモリーとレジスターの内容を表
2示す.それらの値は,各行の実行の終了時点での値である.た
だし,アスタリスク(
)の箇所は,未定であることを示す.物理的にそれらが存在す
るので,値は未定ではあるが,ビットパターンはある.1, 6, 7, 8, 9行はアセンブラ命
令なので実行されない.そのため,メモリーやレジスタの値は空白としている.
この例題で重要なことは,フラグレジスタのSFの値である.ここでの計算は,
![]() |
もし,3行目のADDLの代わりに,ADDAを使うと,GR1の内容は同じ #8000となるが,フラグレジスターはOV=1, SF=1, ZF=0となる.オーバーフロー フラグが異なる.理由は明らかであろう.
| 行 | プログラム | GR1 | OF | SF | ZF | AA | BB | CC | ||
| 1 | PGM | START | ||||||||
| 2 | LD | GR1,AA | #7FFF | 0 | 0 | 0 | #7FFF | 1 | |
|
| 3 | ADDL | GR1,BB | #8000 | 0 | 1 | 0 | #7FFF | 1 | |
|
| 4 | ST | GR1,CC | #8000 | 0 | 1 | 0 | #7FFF | 1 | #8000 | |
| 5 | RET | #8000 | 0 | 1 | 0 | #7FFF | 1 | #8000 | ||
| 6 | AA | DC | #7FFF | |||||||
| 7 | BB | DC | 1 | |||||||
| 8 | CC | DS | 1 | |||||||
| 9 | END | |||||||||
命令語 SUBL: SUBtract Logical (subtract:引き算 logical:論理的な) 役割 符号無し整数の引き算を行う命令. 書式 教科書(p.50)の通り. 機能 教科書(p.50)の通り. フラグレジスタ 教科書(p.49)の通り.
SUBL GR0,GR1 ;GR0←GR0-GR1
SUBL GR0,A ;GR0←GR0-(アドレスAの内容)
SUBL GR0,A,GR1 ;GR0←GR0-(アドレス[A+GR1]の内容)
SUBL GR0,=5 ;GR0←GR0-5
教科書の例題を実行したときのメモリーとレジスターの内容を表 3に示す.この例題で重要なことは,フラグレジスタのSFの 値である.ここでの計算は,
![]() |
| 行 | プログラム | GR1 | OF | SF | ZF | AA | BB | CC | ||
| 1 | PGM | START | ||||||||
| 2 | LD | GR1,AA | #FFFF | 0 | 1 | 0 | #FFFF | 1 | |
|
| 3 | SUBL | GR1,BB | #FFFE | 0 | 1 | 0 | #FFFF | 1 | |
|
| 4 | ST | GR1,CC | #FFFE | 0 | 1 | 0 | #FFFF | 1 | #FFFE | |
| 5 | RET | #FFFE | 0 | 1 | 0 | #FFFF | 1 | #FFFE | ||
| 6 | AA | DC | #FFFF | |||||||
| 7 | BB | DC | 1 | |||||||
| 8 | CC | DS | 1 | |||||||
| 9 | END | |||||||||