8086命令セットの細かいメモ
勉強会で教えてもらったので、忘れないようにメモ
pop csが無い理由
- 8086にはあったが、使われることがなくて廃止された。
- その結果、別の命令が割り当てられた。
- 参考
xchg ax,ax -> nop
の理由
- エイリアス
- 何もしない命令なので、エイリアスがついた
- 昔からある仕様
xchg ax,ax
自体はアセンブル可能- 実は、
90
以外もある- 2byte以上の
nop
- 複数の
nop
を呼ぶコストを削減するため - http://blog.livedoor.jp/blackwingcat/archives/1598318.html
- 2byte以上の
lea ax,ax
などの命令が割り当てられていないのはなぜか
lea ax,[bx]
ax = bx
の代入- カッコを外して代入をする命令
lea ax,[bx+5]
と、ディスプレースメントつきの場合ax = bx +5
の計算が1命令で出来て便利、という使い方
- そのため、
lea ax,ax
の命令だと、そもそもカッコがないので、この命令はありえない。- なので、この命令はない
in, out命令のword/byte切り替えについて
portの指定が1byteのままなのは何故か?
I/O空間自体は、0000 - FFFFまである
- しかし、この中で即値で指定できるのは00FFまで。
- それより上については、
dx
に入れて(Variable Portで)使う。- おそらく、8080とか8bit時代の仕様を引ずっているのでは。