Ladizzz

Untitled

May 25th, 2021
735
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .286
  2. .model small                ; модель памяти
  3. .stack
  4. .data
  5.  
  6. mess0   DB  13,10,'ENTER STRING...: $'
  7. mess1   DB  13,10,'REVERSE STRING.: $'
  8. mess2   DB  13,10,'=================== $'
  9. mess3   DB  13,10,'CREATE FILE OK! $'
  10. buf     DB  20,0,20 DUP (?) ; буфер для сохранения ввода
  11. fName   DB  'TEST.TXT',0    ; имя создаваемого файла
  12. output  DB  0               ; буфер (1 символ) для записи в файл
  13.  
  14. .code                       ; сегмент кода
  15. start:                      ; начало программы
  16.     mov ax,@data
  17.     mov ds,ax
  18.  
  19.     MOV AH,9                ; запрос на ввод строки
  20.     MOV DX,offset mess0
  21.     INT 21h
  22.     MOV AH,0Ah              ; читаем ввод до клавиши ENTER..
  23.     MOV DX,offset buf       ; ^^.. и сохраняем его в буфере
  24.     INT 21h
  25.     MOV AH,9                ; подготовка к выводу строки
  26.     MOV DX,offset mess1
  27.     INT 21h
  28.  
  29. ;======== вывод зеркальной строки на экран
  30.     XOR CX,CX               ; вычисляем длинну строки в буфере
  31.     MOV CL,BYTE PTR[buf+1]  ; CX = длина строки
  32.     MOV SI,offset buf+1     ; SI = смещение строки в буфере
  33.     ADD SI,CX               ; SI = строка+длина (конец строки)
  34.     PUSH SI                 ; сохраним эти данные для записи в файл!
  35.     PUSH CX
  36.     STD                     ; DF = 1 (флаг направления = обратный)
  37. print:
  38.     LODSB                   ; считать символ из буфера
  39.     INT 29h                 ; вывести его на экран
  40.     LOOP print              ; промотать цикл СХ-раз...
  41.  
  42.     MOV AH,9                ; на экране обратная строка
  43.     MOV DX,offset mess2     ; ^^.. подведём под ней черту!
  44.     INT 21h
  45.  
  46. ;======== создать файл!
  47.     MOV AH,3Ch
  48.     MOV DX,offset fName     ; его имя..
  49.     MOV CX,20h              ; ^^.. с атрибутом *архивный*
  50.     INT 21h
  51.     XCHG BX,AX              ; сохраняем дескриптор файла в BX
  52.  
  53. ;======== подготовка к записи в файл функцией 40h
  54.     POP CX
  55.     POP SI                  ; снимаем со-стека адрес и длинну строки
  56.     STD                     ; DF уже установлен (на всякий/пожарный взведём)
  57. write:
  58.                        ; ========/ начало записи в файл... ================/
  59.     PUSH CX                 ; цикл изменит CX. сохраним его
  60.     LODSB                   ; берём символ в AL, с адреса SI
  61.     MOV [output],AL         ; кидаем его во-временный буфер
  62.     MOV DX,offset output    ; DX = адрес этого буфера
  63.     MOV CX,1                ; кол-во выводимым символов
  64.     MOV AH,40h              ; (fn)40H = запись в файл (в ВХ уже висит дескриптор)
  65.     INT 21h                 ; записываем 1 символ в файл
  66.     POP CX                  ; снимаем со-стека счётчик
  67.     LOOP write              ; мотаем цикл CX-раз
  68.  
  69. ;======== закрываем созданный файл
  70.     MOV AH,3Eh
  71.     INT 21h
  72.  
  73.     MOV AH,9                ; мессага "CREATE FILE OK!"
  74.     MOV DX,offset mess3
  75.     INT 21h
  76.  
  77.     mov ax,4C00h
  78.     int 21h
  79. end start
RAW Paste Data