Сортировка и запись в файл строки, введённой с клавиатуры - Assembler

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

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

Нужно рассортировать вводимые с клавиатуры символы на цифры и другие символы и записать в два файла Я думала сделать через буфер, но не знаю, как туда записать, а потом из буфера в файл кинуть
code_seg segment
ASSUME CS:code_seg,DS:code_seg,ES:code_seg
org 100h
 
start: 
; create file
MOV AH, 3Ch ; CREATE создание файла
MOV CX, 0 ; 
MOV DX, OFFSET Filenum
INT 21H 
Mov HandlerNum, AX 
 
numbr DB 0 ; counter счетчик для чисел
othr db 0;      для других символов
len db 0
 
cycle: ;цикл
vvod proc near   ;vvod simbol into AL 
    mov len,30h          ; 
        mov AH, 01h   ;ввод с клавиатуры
        int 21h 
        mov bl,0Dh  
        cmp bl,al      ; проверка: если нажата клавиша enter
      je exit            ; то выход
        mov bl,27
        cmp bl,al      ;проверка: если нажата клавиша esc
      je exit            ;то выход
 
; проверяем число или нет
        ; check1 0<=AL<=9
        mov DH, 30h  ; DH=0
        cmp AL, DH   ; AL<DH?
      jc other          ; other
        mov DH, 3Ah  ; DH=9+1ascii
        cmp AL, DH   ; AL<DH?
      jc number      ; it is number
      jc other
 
other: 
;count
add othr, 1
;здесь по аналогу с цифрами вставлю
jmp cycle  ;возвращаю в цикл
 
number:
;count счетчик, вдруг понадобится
add numbr, 1  
 
bufnum db ' '  ; вроде как буфер
;
;   здесь должна быть запись из AL в буфер
;
mov  ah,40h        ; это вроде как запись в файл, но оно кидает в файл что-то непонятное
mov  bx,handlernum    
mov  cx,3        
lea dx,bufnum
mov ah,3eh
mov bx,handlernum
int 21h
 
jmp cycle   ; возвращаем в цикл

;NUMBER    
 
    BuflenNum EQU $ - bufnum         
    HandlerNum DW ?                   
Filenum DB "num.txt",0 
 
;OTHER SIMBOLS
Buf6 DB "other simbol:", 13,10,"$"
    Buflen6 EQU $ - BUF6           
    Handler6 DW ?                   
Filename6 DB "other.txt",0  

exit:      ; exit
int 20h
end start 
code_seg ends

Решение задачи: «Сортировка и запись в файл строки, введённой с клавиатуры»

textual
Листинг программы
code_seg segment
ASSUME CS:code_seg,DS:code_seg,ES:code_seg
org 100h
 
start: 
; create file
MOV AH, 3Ch ; CREATE создание файла
MOV CX, 0 ; 
MOV DX, OFFSET Filenumber
INT 21H 
Mov HandlerNum, AX 
 
numbr DB 30h ; counter счетчик для чисел
othr db 30h;      для других символов
 
cycle: ;цикл
vvod proc near   ;vvod simbol into AL 
    mov len,30h          ; 
        mov AH, 01h   ;ввод с клавиатуры
        int 21h 
        mov bl,0Dh  
        cmp bl,al      ; проверка: если нажата клавиша enter
      je exit            ; то выход
        mov bl,27
        cmp bl,al      ;проверка: если нажата клавиша esc
      je exit            ;то выход
 
; проверяем число или нет
        ; check1 0<=AL<=9
        mov DH, 30h  ; DH=0
        cmp AL, DH   ; AL<DH?
      jc other          ; other
        mov DH, 3Ah  ; DH=9+1ascii
        cmp AL, DH   ; AL<DH?
      jc number      ; it is number
      jc other
 
 
other: 
;count
add othr, 1
;здесь по аналогу с цифрами вставлю
jmp cycle  ;возвращаю в цикл
 
number:
;count счетчик, вдруг понадобится
add numbr, 31h  
 
bufnum db ' '  ; вроде как буфер
 
;
;   здесь должна быть запись из AL в буфер
;
 
mov  ah,40h        ; это вроде как запись в файл, но оно кидает в файл что-то непонятное
mov  bx,handlernum    
mov  cx,3        
lea dx,bufnum
int 21h
mov ah,3eh
mov bx,handlernum
int 21h
 
 
jmp cycle   ; возвращаем в цикл
 
 
 
 
 
;NUMBER    
 
    BuflenNum EQU $ - bufnum         
    HandlerNum DW ?                   
Filenum DB "num.txt",0 
 
;OTHER SIMBOLS
Buf6 DB "other simbol:", 13,10,"$"
    Buflen6 EQU $ - BUF6           
    Handler6 DW ?                   
Filename6 DB "other.txt",0  
 
 
exit:      ; exit
int 20h
end start 
code_seg ends

Объяснение кода листинга программы

  1. Создание файла с помощью сервиса операционной системы (INT 21H с аргументами 3Ch и 0).
  2. Переменные «номер» и «другие» инициализируются как 30h.
  3. Начинается цикл ввода.
  4. Если нажата клавиша Enter (0Dh), то выполняется команда выхода (jump exit).
  5. Если нажата клавиша Esc (27), то выполняется команда выхода (jump exit).
  6. Проверка, является ли введенный символ числом (0-9).
  7. Если введенный символ меньше, чем 0Dh (значение переменной DH), то выполняется команда для других символов.
  8. Если введенный символ больше или равен 0Dh, то выполняется команда для чисел.
  9. Если введенный символ является числом, то увеличивается значение переменной «номер» на 31h.
  10. Если введенный символ является другим символом, то увеличивается значение переменной «другие» на 1.
  11. Если введенный символ не является числом или другим символом, то выполняется команда для других символов.
  12. Запись введенного числа в буфер (необходимо дополнительно исследовать, что именно записывается).
  13. Запись в файл (INT 21H с аргументами 40h, BX, CX, DX и 3).
  14. Запись в другой файл (INT 21H с аргументами 3eh, BX и CX).
  15. Переменная «номер» равна 0.
  16. Переменная «другие» равна 0.
  17. Переменная «handler» равна 0.
  18. Переменная «buflen» равна 0.
  19. Переменная «bufnum» равна пробелу (' ').
  20. Переменная «filename» равна num.txt.
  21. Переменная «buf6» равна other simbol:, 13,10,$.
  22. Переменная «buflen6» равна 0.
  23. Переменная «handler6» равна 0.
  24. Переменная «filename6» равна other.txt.

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

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