0

アセンブリ言語を学ぼうとしていますが、配列への書き込みに単純な問題があります。私のプログラムは、コマンド ライン引数を読み取り、表示し、配列に書き込む必要があります。以下のコードには、マークされた行が 1 つあります。この行でコンパイルすると、コメント付きのプログラムは正常に動作しますが、コメントを外すと、いくつかの文字が表示された後にハングします。ここで何が問題なのですか?短い引数行がある場合に機能しますが、この配列はコマンド行全体を含めるのに十分な大きさでなければなりません。ここで何か不足していますか?

                                 assume cs:kod, ds:dane 

kod     segment
.286


start:  

mov     ax,seg wstos
mov     ss,ax
mov     sp,offset wstos                               

xor     cx,cx
xor     ax,ax    
mov     si,80h 
mov     dl,[si]
mov     cl,dl
mov     ah,2h
int     21h
inc     si
xor     di,di

petla:
    inc     si
    mov     dl,[si]
    ;mov        [tablica + di],dl  <<<< this line
    test    dl,dl
    jz      sprawdz
    int     21h
    inc     di
    dalej:
loop    petla

sprawdz:
    mov     al,[si+1]
    cmp     al,0
    jne     dalej



koniecprogramu:
mov     ax,4c00h  
int     21h

dane    segment
    tablica     db  128 dup(0)
dane    ends

stos1   segment STACK
    dw  256 dup(?)
    wstos   dw  ?
stos1   ends
4

2 に答える 2

0

私はそう思いますがoffset tablica == 0、ds==csでもあります。これらの行が期待どおりに機能する場合は、少なくとも次のようにする必要があります。

mov si, 80h
mov al, [si]; 

準拠させるには、dsを初期化する必要があります(この場合、コマンドラインにを使用してアクセスするmov al,cs:[si]か、2行をコメントアウトしてデータをコードセグメントに残すことができます。

;dane    segment
    tablica     db  128 dup(0)
;dane    ends
于 2013-01-02T14:58:22.880 に答える
0

「mov [tablica + di]」 ES は?

于 2013-01-02T14:53:40.897 に答える