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が同義のようです。
論理シフトは符号ビット(先頭ビット,第15ビット,最も左のビット)を含めてシフトするもので、空いたビット位置すべてに0が入ります。対する算術シフトは符号ビットを除いてシフトするもので、空いたビット位置すべてに左シフトの時は0、右シフトの時は符号ビットと同じものが入ります。
shlが論理左シフトで、salが算術左シフト。
左シフトは論理シフトも算術シフトも一緒なので、命令は重複しているわけです。