По нажатию Ctrl+А завершить работу программы и выполнить команду dir - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, написать программу на Turbo Assembler которая после нажатия [Ctrl ] + [А] завершить работу программы и выполнить команду DOS : dir.

Решение задачи: «По нажатию Ctrl+А завершить работу программы и выполнить команду dir»

textual
Листинг программы
org  100h
jmp  start
 
mes0    db  13,10,' Ctrl+A - emulation "DIR"'
        db  13,10,' ------------------------------------------'
        db  13,10,' Enter string: $'
mes1    db  13,10
        db     10,' File name'
        db  13,10,'+----------------+',13,10,' $'
crlf    db  13,10,' $'     ; перевод строки
dtaBuf  db  44 dup(0)      ; +30 = имя файла (13 символов)
fName   db  '*.*',0        ; маска с именем файла (все файлы)
noFile  db  7,13,10,'<---All files printed!$'
 
start:                     ;
   align 16                ; выравним параграф памяти..
   mov   ah,9              ;
   mov   dx,mes0           ;
   int   21h               ;
 
@@:                        ;
   xor   ax,ax             ; читаем клаву..
   int   16h               ;
   cmp   al,1              ; Ctrl+A ?!
   je    dirCommand        ;
   int   29h               ;
   jmp   @b                ;
 
dirCommand:                ;
   mov   ah,9              ;
   mov   dx,mes1           ;
   int   21h               ;
 
   mov   ah,1Ah            ; установим область DTA
   mov   dx,dtaBuf         ;
   int   21h               ;
 
   mov   ah,4Eh            ; искать файл..
   mov   cx,10h            ; атрибут - включая каталоги!
   mov   dx,fName          ; маска имени файлов
   int   21h               ;
   jc    stop              ; ошибка?
   call  printName         ; выводим имя на экран
 
findNext:                  ;
   mov   ah,4Fh            ; искать сл.файл..
   mov   dx,dtaBuf         ; буфер для данных
   int   21h               ;
   jc    stop              ;
   call  printName         ;
   jmp   findNext          ; мотаем цикл до ошибки..
 
stop:                      ;
   mov   ah,9              ; нет больше файлов!
   mov   dx,noFile         ;
   int   21h               ;
exit:
   xor   ax, ax            ;
   int   16h               ;
   int   20h               ; на выход!
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
; Функция выводит имя файла на экран, из области DTA
printName:                 ;
   mov   si,dtaBuf+30      ; смещаемся в буфере к имени файла
@@:                        ;
   lodsb                   ; читаем символы,
   or    al,al             ;     ..пока не встретится нуль
   jz    @f                ;
   int   29h               ; выводим их на экран
   jmp   @b                ;
@@:                        ;
   mov   ah,9              ; вставляем перенос строки
   mov   dx,crlf           ;
   int   21h               ;
ret                        ;

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы