0

現在、20 個の最初のフィボナッチ数を書き込むプログラムを作成しています。私が現在求めているのは、これが可能かどうかです。

MOV DS, 3000H
MOV SI, 4000H
MOV DL, 123
MOV CL, 5
MOV DS:[SI+CL], DL

(これは、フィボナッチ数とは関係のない単なる一般的なコードです) したがって、メモリのアドレス 3000H:4005H に '123' を書き込みます。それは可能ですか?したがって、SI と CL の両方を増やす必要はありません (CL を使用して、20 時間または 14 時間に達したときにプログラムを終了します)。

編集:これは私の実際のコードですが、データを正しく書き込んでいません。

cseg segment
assume cs:cseg
    Start:  mov ax, 3000h
            mov ds, ax
            mov si, 4000h
            mov bx, 0
            mov al, 1
            mov bl, 1
            mov ds:[si], al
            inc bx
            mov ds:[si+bx], bl
            inc bx
    Again:  mov dl, al
            add dl, bl
            mov al, bl
            mov bl, dl
            mov ds:[si+bx], dl
            inc bx
            cmp bx, 20
            jc Again
            int 3h
cseg    ends
end     Start
4

1 に答える 1

1

16 ビット アドレス モードについて説明しているドキュメントを読み直してください。

BXつまり、ベース レジスタまたはBP、インデックス レジスタSIまたはDI、および実効アドレスの定数ディスプレースメントのみを使用できます。そのため、次のことができます。

MOV AX, 3000H
MOV DS, AX
MOV SI, 4000H
MOV DL, 123
MOV BX, 5
MOV [SI+BX], DL

変位が一定の 4000H の場合、次のように書くこともできます。

MOV AX, 3000H
MOV DS, AX
MOV DL, 123
MOV BX, 5
MOV [4000H+BX], DL
于 2015-01-13T13:04:15.240 に答える