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

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

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

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

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

textual
Листинг программы
  1. org  100h
  2. jmp  start
  3.  
  4. mes0    db  13,10,' Ctrl+A - emulation "DIR"'
  5.         db  13,10,' ------------------------------------------'
  6.         db  13,10,' Enter string: $'
  7. mes1    db  13,10
  8.         db     10,' File name'
  9.         db  13,10,'+----------------+',13,10,' $'
  10. crlf    db  13,10,' $'     ; перевод строки
  11. dtaBuf  db  44 dup(0)      ; +30 = имя файла (13 символов)
  12. fName   db  '*.*',0        ; маска с именем файла (все файлы)
  13. noFile  db  7,13,10,'<---All files printed!$'
  14.  
  15. start:                     ;
  16.    align 16                ; выравним параграф памяти..
  17.    mov   ah,9              ;
  18.    mov   dx,mes0           ;
  19.    int   21h               ;
  20.  
  21. @@:                        ;
  22.    xor   ax,ax             ; читаем клаву..
  23.    int   16h               ;
  24.    cmp   al,1              ; Ctrl+A ?!
  25.    je    dirCommand        ;
  26.    int   29h               ;
  27.    jmp   @b                ;
  28.  
  29. dirCommand:                ;
  30.    mov   ah,9              ;
  31.    mov   dx,mes1           ;
  32.    int   21h               ;
  33.  
  34.    mov   ah,1Ah            ; установим область DTA
  35.    mov   dx,dtaBuf         ;
  36.    int   21h               ;
  37.  
  38.    mov   ah,4Eh            ; искать файл..
  39.    mov   cx,10h            ; атрибут - включая каталоги!
  40.    mov   dx,fName          ; маска имени файлов
  41.    int   21h               ;
  42.    jc    stop              ; ошибка?
  43.    call  printName         ; выводим имя на экран
  44.  
  45. findNext:                  ;
  46.    mov   ah,4Fh            ; искать сл.файл..
  47.    mov   dx,dtaBuf         ; буфер для данных
  48.    int   21h               ;
  49.    jc    stop              ;
  50.    call  printName         ;
  51.    jmp   findNext          ; мотаем цикл до ошибки..
  52.  
  53. stop:                      ;
  54.    mov   ah,9              ; нет больше файлов!
  55.    mov   dx,noFile         ;
  56.    int   21h               ;
  57. exit:
  58.    xor   ax, ax            ;
  59.    int   16h               ;
  60.    int   20h               ; на выход!
  61.  
  62. ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  63. ; Функция выводит имя файла на экран, из области DTA
  64. printName:                 ;
  65.    mov   si,dtaBuf+30      ; смещаемся в буфере к имени файла
  66. @@:                        ;
  67.    lodsb                   ; читаем символы,
  68.    or    al,al             ;     ..пока не встретится нуль
  69.    jz    @f                ;
  70.    int   29h               ; выводим их на экран
  71.    jmp   @b                ;
  72. @@:                        ;
  73.    mov   ah,9              ; вставляем перенос строки
  74.    mov   dx,crlf           ;
  75.    int   21h               ;
  76. ret                        ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы