by shigemk2

当面は技術的なことしか書かない

SHL/SALでちょっとハマる

SHL/SAL命令。仕様書だと中身が重複している。

このアセンブラをnasmでアセンブルして、ndisasmで逆アセンブルする。

shlsas.s

shl byte [bx+si],1
sal byte [bx+si],1
$ nasm shlsal.s
$ ndisasm shlsal

するとこうなる。

00000000  D020              shl byte [bx+si],1
00000002  D020              shl byte [bx+si],1

shlとsalが同義のようです。

1.20 論理シフトと算術シフト

論理シフトは符号ビット(先頭ビット,第15ビット,最も左のビット)を含めてシフトするもので、空いたビット位置すべてに0が入ります。対する算術シフトは符号ビットを除いてシフトするもので、空いたビット位置すべてに左シフトの時は0、右シフトの時は符号ビットと同じものが入ります。

shlが論理左シフトで、salが算術左シフト。

左シフトは論理シフトも算術シフトも一緒なので、命令は重複しているわけです。