6

2 つの 6 桁の 10 進数を取得してそれらの加算を表示するプログラムを作成しようとしていますが、16 ビット 8086 で数値をダブルワードとして定義し、ワード 1 に LO を、ワード 2 に HO を配置しました。以下のコードに似ていますが、私は次に何をするか考えていません。次の操作のアルゴリズムを提案してくれる人はいますか? 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 は 10 の倍数になり、次のように新しい数字が di に追加されます: 28 を取得するプロセス di=0*10+2=2 di= 2*10*+8=28

4

1 に答える 1

11

コメントされていないコードに従うのではなく、独立した例を示します。

DX:AX に 1 つの 32 ビット数と CX:BX に 1 つの 32 ビット数があるとします (この表記は、たとえば、上位 16 ビットが DX に格納され、下位 16 ビットが AX に格納されることを意味します)。これらの値を加算して結果を DX:AX に残すには、次のようにします。

    add ax,bx
    adc dx,cx

このadd命令は 2 つの値を加算しキャリーがあったかどうかに応じて C (キャリー) ビットを 1 または 0 に設定します。このadc命令は、2 つの値とキャリー ビットの値を加算します (その後、キャリー ビットを再度設定します)。このようにして、さらにadc命令を続けることで、任意のサイズの値を追加できます。

于 2011-12-02T07:08:09.037 に答える