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

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

Tips IA32(x86)汎用命令一覧 Aから始まる命令 AAD命令

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 補足


Aから始まる命令

クリックすると、表の下に詳細が表示されます
Aから始まる命令一覧
命令 代表命令の説明
(英語)
代表命令の説明
(日本語)
AAA ASCII Adjust After Addition 加算後にALをASCII調整する
AAD ASCII Adjust AX Before Division 除算前にASCII調整する
AAM ASCII Adjust AX After Multiply BCD掛け算後調整
AAS ASCII Adjust AL After Subtraction 減算後にALをASCII調整する
ADC Add with Caryy キャリーを加えて加算する
ADD Add 加算する
AND Logical AND 論理積
ARPL Adjust RPL Field of Segment Selector r/m16のRPLをr16のRPL未満に調整する


AAD(ASCII Adjust AX Before Division)

AAD命令
オペコード 命令 説明
0xD5 0x0A AAD 除算前にAXをASCII調整する
0xD5 ib (ニーモニックなし) 除算前にAXを基数imm8に調整する


詳細

DIV命令の直前にAAD命令を実行することで、ALレジスタの下位桁とAHレジスタの上位桁をBCDに調整します

AAD命令はDIV命令の直前に実行したときにのみ有効です



AAD命令は、ALレジスタの値を(AL+(10*AH))に設定し、AHレジスタを0x00にクリアします

この結果、AXレジスタの値はAL(10の位)とAH(1の位)で指定したBCDのバイナリ値となります



imm8に基数を設定でき(8進数は0x08、10進数は0x0A、12進数は0x0C)、DIV命令の直前に実行することで

設定した基数に調整することができます。アセンブラ言語でAAD命令を指定するとimm8に10進数を指定したことになります

他の基数に設定するときは、アセンブラ結果のコード自体を手動で変更する必要があります

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

影響のあるEFLAGSレジスタのフラグ
フラグ 説明
ID -
VIP -
VIF -
AC -
VM -
RF -
NT -
IOPL -
OF 未定義
DF -
IF -
TF -
SF ALレジスタの2進値の結果に従ってセットされます
ZF ALレジスタの2進値の結果に従ってセットされます
AF 未定義
PF ALレジスタの2進値の結果に従ってセットされます
CF 未定義


inserted by FC2 system