0

配列のコンテンツの書き込みに問題があります。以下のコードでは、画面に印刷しようとしています。しかし、引数の量が少ない場合、常にすべてのコンテンツが表示されるとは限りません。最初の n 個の引数の場所が空白の場合があります。しかし、より多くの引数がある場合、32 個すべてが表示されます。(配列は128バイト)

mov     ax,32
mov     cx,ax
xor     si,si
pet:
    mov     dl,tablica[si]
    mov     ah,2h
    int     21h
    inc     si
loop pet

配列の宣言です。もちろん、ds は dane seg によって初期化されます。

dane    segment
    tablica     db  128 dup('$')
dane    ends
4

1 に答える 1

0

そこにバグは見られません。しかし一方で、それはプログラム全体ではありません。

サイズが128バイトの配列の32バイトのみを出力します。配列のどのバイトが印刷されるかがわからないため、デバッグには役立ちません。デバッグの目的でtablica db 128 dup('$')、どのバイトが具体的に印刷されるかを知ることができるものに置き換えることをお勧めします。たとえば、次のようになります。

tablica db 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

そして、abcdefghijklmnopqrstuvwxyzABCDEF出力として取得しますか?そうでない場合は、配列を印刷する前にコード内の別の場所で破損しているか、dsポイントが間違った場所を指しているか、割り込みがフックされているか壊れているint 21h可能性があります (コードで割り込みベクトルを処理していない場合、これは非常にまれです)。

于 2013-01-07T21:47:14.857 に答える