次の式 (yy+h+m)-(d+d) から始まるプログラムをアセンブリ言語で書くように依頼されました。変数はバイトで表され、h の値だけが128。
imul や idiv を使用するための乗算や除算がないため、1 つは符号なし規則を使用し、もう 1 つは符号付き規則を使用する 2 つのプログラムが必要です。これが何を意味するのかわかりません。
cbw コマンドを使用する必要がありますか?使用する場合は、どのようにしますか?
この計算を行うには、すべてのバイト値をワードに変換してから計算を行う必要があります。これは、結果がバイトよりも大きくなるためです。
したがって、バイト値をワード (2 バイト) に拡張することは、符号付きの数値と符号なしの数値では異なります。これは、上位バイトの内容が規則に依存するためです。
バイト値が符号なしの場合、ワード値の上位バイトを 0 に設定する必要があります。たとえば、$8c は 2 バイトに変換されます: $8c $00 ($008c)
バイト値がため息をついた場合、上位バイトはバイト値の符号ビットの値で埋められる必要があります。同じ例: $8c を $8f $ff に拡張する必要があります。命令cbw
は符号付き変換を行います。
コードとしては、次のようになります。
; unsigned
mov al, byte [SomeByteVariable]
mov ah, 0
add ax, 1234 ; here we have unsigned word value.
; signed
mov al, byte [SomeByteVariable]
cbw
add ax, 1234 ; here we have signed word value