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