0から作るソフトウェア開発

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

Tips IA32(x86)汎用命令一覧 Sから始まる命令 SCAS/SCASB/SCASW/SCASD命令

IA32(x86)汎用命令一覧

このサイトで挙げる命令は汎用命令の一覧となります

調べたい命令の頭文字をクリックすると、表の下に詳細が表示されます
IA32(x86)汎用命令一覧
A B C D E F G H
I J K L M N O P
Q R S T U V W X
Y Z 補足


Sから始まる命令

クリックすると、表の下に詳細が表示されます
Sから始まる命令一覧
命令 代表命令の説明
(英語)
代表命令の説明
(日本語)
SAHF Store AH into Flags EFLAGSのSF、ZF、AF、PF、CFをAHからEFLAGSにロードする
SAL/SAR Shift Arithmetic Left/Right 算術シフト
SBB Integer Subtraction with Borrow ボロー有りで減算する
SCAS/SCASB/SCASW/SCASD Scan String 文字列を比較する
SETcc Byte Set on Condition 条件に適合する場合バイトを設定する
SGDT Store Global Descriptor Table Register GDTをメモリにストアする
SHL/SHR Shift Left/Right ビットをシフトする
SHLD Double Precision Shift Left 指定したビット数左シフトし、シフトインするビットを指定する
SHRD Double Precision Shift Right 指定したビット数右シフトし、シフトインするビットを指定する
SIDT Store Interrupt Descriptor Table Register IDTをメモリにストアする
SLDT Store Local Descriptor Table Register LDTをメモリにストアする
SMSW Store Machine Status Word マシンステータスワードをメモリにストアする
STC Set Carry Flag EFLAGSのCFビットを1にする
STD Set Direction Flag EFLAGSのDFフラグを1にする
STI Set Interrupt Flag EFLAGSのIFフラグを1にする
STOS/STOSB/STOSW/STOSD Store String Data 文字列データを指定アドレスにストアする
SUB Integer Subtraction 整数の減算


SCAS/SCASB/SCASW/SCASD命令(Scan String)

SCAS/SCASB/SCASW/SCASD命令
オペコード 命令 説明
0xAE SCAS m8 ALをES:(E)DIのバイトと比較し、ステータスフラグを設定します
0xAF SCAS m16 AXをES:(E)DIのワードと比較し、ステータスフラグを設定します
0xAF SCAS m32 EAXをES:(E)DIのダブルワードと比較し、ステータスフラグを設定します
0xAE SCASB m8 ALをES:(E)DIのバイトと比較し、ステータスフラグを設定します
0xAF SCASW m16 AXをES:(E)DIのワードと比較し、ステータスフラグを設定します
0xAF SCASD m32 EAXをES:(E)DIのダブルワードと比較し、ステータスフラグを設定します


詳細

メモリオペランドで指定されたバイト、ワード、ダブルワードをAL、AX、EAXの値と比較し、結果に従ってEFLAGSの

ステータスフラグを設定します。メモリオペランドアドレスは(命令のアドレスサイズ属性、32または16に応じて)それぞれ

ES:EDIまたはES:DIからよみとられます。ESセグメントは、セグメントオーバーライドプリフィクスでオーバーライドすることは

できません。



アセンブラコードレベルでは、この命令の「オペランド指定」形式と「オペランドなし」形式の2つの形式が使用できます

「オペランド指定」形式(SCASニーモニックで指定します)では、メモリオペランドを明示的に指定することができます

オペランドはそのサイズとアドレスを示す記号となります。レジスタオペランドは自動的に選択されます(バイト比較では

AL、ワード比較ではAX、ダブルワード比較ではEAX)。「オペランド指定」形式はソースコードの可読性を高めるために

導入されましたが、使用には誤解を招く恐れがある場合がありますので、注意が必要です。すなわち、両方のオペランドの

記号は正しいタイプ(サイズ)のオペランド(バイト、ワード、ダブルワード)を指定する必要がありますが、正しいアドレスを

指定する必要はありません。両方のオペランドのアドレスは常にES:(E)DIによって指定されますので、

ストリング比較命令を実行する前に、正しいアドレスをES:(E)DIにロードしおく必要があります

「オペランドなし」形式は、「省略形式」のバイト、ワード、ダブルワード用のSCAS命令が使用できます

この場合も、プロセッサはES:(E)DIがメモリオペランドで、AL、AX、EAXがレジスタオペランドであると

想定して動作します。オペランドのサイズはSCASB(バイト比較)、SCASW(ワード比較)、

SCASD(ダブルワード比較)の各ニーモニックで選択します



比較の後、EFLAGSレジスタのDFフラグの設定に従って、(E)DIの値が自動的にインクリメントまたは

デクリメントされます。(DFが0の場合はレジスタがインクリメントされ、DFが1の場合はレジスタが

デクリメントされます)。このレジスタは、バイト操作の場合は1、ワード操作の場合は2、ダブルワード操作の場合は4を

それぞれインクリメントまたはデクリメントされます。



SCAS、SCASB、SCASW、SCASD命令は、前にREPプリフィクスを付けることにより、ECXに指定されるカウント数分

バイト、ワード、ダブルワード単位で繰り返し比較を行うことができます。一般的には、次の比較が行われる前に

ステータスフラグの値に基づいて何らかの処理を行うLOOPのなかで使用されます

影響のあるEFLAGSレジスタのフラグ

影響のあるEFLAGSレジスタのフラグ
フラグ 説明
ID -
VIP -
VIF -
AC -
VM -
RF -
NT -
IOPL -
OF 比較の一時的な結果に従って格納されます
DF -
IF -
TF -
SF 比較の一時的な結果に従って格納されます
ZF 比較の一時的な結果に従って格納されます
AF 比較の一時的な結果に従って格納されます
PF 比較の一時的な結果に従って格納されます
CF 比較の一時的な結果に従って格納されます


inserted by FC2 system