在汇编语言中写入数组的问题

时间:2013-01-02 12:25:55

标签: arrays assembly x86 dos

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

                                 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

2 个答案:

答案 0 :(得分:0)

“mov [tablica + di]” ES怎么样?

答案 1 :(得分: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