Я пытаюсь написать простую программу в x86 (используя MASM для компиляции). Цель состоит в том, чтобы написать аргументы командной строки для вывода (каждая в новой строке). Вот что я придумал до сих пор:сборка x86 аргументы командной строки
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% казней. Любая помощь будет высоко ценится
Ваша программа не имеет сегмента стека и не должна работать на основе именно этого. Ваша программа также не подходит правильно. –