8086で16ビットレジスタで32ビット数字を操作する
質問
2つの6桁の小数を取得してそれらの追加を表示するプログラムを作成しようとしていますが、16ビット8086では、数字をダブルワードとして定義し、Word 1にLOをワード2に定義します。次にやることを考えていませんが、次の操作のためのアルゴリズムを提案できますか? thnx
x dd(?)
next_no:
mov cl,2
mov ch,4
two_bit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x+2,di
dec cl
jnz two_bit
fourbit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x,di
dec ch
jnz fourbit
このプログラムでは、diは、ユーザーが複数のdiを入力するとループを介して作成された数を保存する場所です。 2*10*+8 = 28
解決
メンタリングされていないコードに従うのではなく、独立した例を提示します。
DXに1つの32ビット数が1つ、CX:BXに1つの32ビット数があるとします(この表記は、たとえばDXに16の咬傷が保存され、AXで低い16ビットが保存されることを意味します)。これらの値を追加して結果をdx:axに残すには、次のようになります。
add ax,bx
adc dx,cx
add
命令は2つの値を追加します セット キャリーがあるかどうかに応じて、C(キャリー)ビットは1または0にビットします。 adc
命令は2つの値を追加します プラス キャリービットの値(そして、キャリービットを再度設定します)。このようにして、より多くのことを続けることにより、あらゆるサイズの値を追加できます adc
指示。
所属していません StackOverflow