我正在尝试在 x86 中编写一个简单的程序(使用 MASM 编译)。它的目的是将命令行参数写入输出(每个都在一个新行中)。到目前为止,这是我想出的:
data1 segment
input db 40 dup (?) ;input
data1 ends
code1 segment
START:
mov ax,seg input
mov ds,ax
mov dx,offset input
mov di, dx
mov si, 82h
mov cl,es:[80h]
word:
mov al,es:[si]
mov ds:[di],al
inc si
inc di
cmp al,0Dh ;out of arguments? (if YES goto finish)
jz finish
cmp al,20h ;end of word? (if NO goto word)
jnz word
mov al, '$' ;line terminate
mov ds:[di], al
mov ah,09h ;write string
int 21h
xor di,di ;prepare registry for new word
call new_line
loop word
finish:
mov al, '$'
mov ds:[di], al
mov ah,09h ;write last argument
int 21h
mov ax,4ch ;end program
int 21h
new_line:
push ax
push bp
mov ax,0e0ah ;ah=0e-write char,al=0a-go to new line
int 10h
mov al,13 ;carriage return
int 10h
pop bp
pop ax
ret
code1 ends
end START
在 emu8086 下测试时它似乎工作正常,但在使用 MASM 编译后,它仅在 10% 的执行中给出正确的结果。任何帮助将非常感激