最初のエラー:
- 8 ビットのみを割り当てる変数から 16 ビットを読み取ります。
- アドレス res+1 に書き込むのも意味がありません (しかし res+2 に)。
- 書き込もうとしても
mov byte ptr addr, ax
失敗するはずです
- する必要があります
mov word ptr res, ax
最初の質問への答えは次のとおりです。特別なことは何もありません。
add ax, bx
署名されているかどうかは気にしません。面白いのは、ステータス レジスタを検査するときです。キャリー フラグ、サイン フラグ、オーバーフロー フラグがあります。(および 25 以上の無関係なフラグ)。補足として、同じ符号の加数に対してCarry_flag != sign_flag の場合、オーバーフロー フラグが設定されます。これは、2 つの負の数の加算/減算を正と解釈したり、2 つの正の数の加算を負と解釈したりできることを意味します。符号が異なる加数 (3) + (-2) の場合、オーバーフローは発生しません。
符号フラグは、比較と分岐によってアクセスできます。
add ax,bx
jns process_unsigned // or
js process_signed
または、レジスタの符号ビットを別の場所に転送することに関心がある場合は、次のことができます
- mov cl, 16; sar ax, cl;
// 符号ビットをワード ax または
- add ax, ax
(または shl ax,1
) // 符号ビットを AX の「左」側からシフトアウトしてキャリービット
さらに、pushf
フラグpop ax
を汎用レジスターにステータスし、個々のビットを検査することができます。