 |
Ассемблер в примерах - Вывод содержимого командной строки в файл
- Вопрос:
- Помогите разработать ассемблер программу выводящую в файл содержимое командной строки MS DOS при запуске программы.
Самое непонятное- это как вывести содржимое командной строки.
- Ответ:
-
.model small ; ЕХЕ-файл
.stack 100h
.data
f_handle dw 1
fileName db '169029.txt',0
buf db ?
count dw 0
Press_key db 13,10,'Press any key ...$'
msg_no_args db 13,10,'В командной строке нет аргументов$'
msg_success db 13,10,'Вывод в файл завершен$'
msg_no_file db 13,10,'Не могу создать файл для вывода параметров$'
.code
start:
mov ax, @data
mov ds, ax
mov ax,3
int 10h
mov cl, es:80h
or cl, cl
jnz @@_get
jmp @@_no_args
@@_get:
xor ch, ch
mov count, cx
mov ah, 3Ch
lea dx, fileName
mov cx, 20h
int 21h
jnc @@_get_params
jmp @@_no_file
@@_get_params:
mov f_handle, ax
mov cx, count
dec cx
mov bx, 80h
cld
@@_next:
inc bx
mov al, es:[bx]
CALL WriteChar_to_file
LOOP @@_next
lea dx, msg_success
mov ah, 9
int 21h
mov ah, 3Eh ; закрыть файл
mov bx, f_handle
int 21h
jmp @@_exit
@@_no_file:
lea dx, msg_no_file
mov ah, 9
int 21h
jmp @@_exit
@@_no_args:
lea dx, msg_no_args
mov ah, 9
int 21h
@@_exit:
lea dx, Press_key
mov ah, 9
int 21h
xor ax, ax
int 16h
mov ax, 4C00h
int 21h
; процедура для вывода символа в файл или на экран, в зависимости от содержимого f_handle
; выводимый символ должен быть в AL
; f_handle должен быть установлен заранее
WriteChar_to_file proc
push ax
push bx
push cx
push dx
mov buf, al
mov ah, 40h
mov bx, f_handle
lea dx, buf
mov cx, 1
int 21h
pop dx
pop cx
pop bx
pop ax
ret
WriteChar_to_file endp
end start
|  |