0

我正在尝试学习汇编语言,但我在写入数组时遇到了一个简单的问题。我的程序应该读取命令行参数,显示它们并写入数组。在下面的代码中,有一个标记的行。如果我用这行注释程序编译它可以正常工作,但如果我取消注释它,它会在显示几个字符后挂起。这里有什么问题?当参数行较短但此数组应足够大以包含整个命令行时,它可以工作。我在这里错过了什么吗?

                                 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

“mov [tablica + di]” ES 呢?

于 2013-01-02T14:53:40.897 回答
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 回答