Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Вывод содержимого командной строки в файл

Вопрос:
Помогите разработать ассемблер программу выводящую в файл содержимое командной строки 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

   Вперёд
   Содержание