Сортировка и запись в файл строки, введённой с клавиатуры - 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
Объяснение кода листинга программы
- Создание файла с помощью сервиса операционной системы (INT 21H с аргументами 3Ch и 0).
- Переменные «номер» и «другие» инициализируются как 30h.
- Начинается цикл ввода.
- Если нажата клавиша Enter (0Dh), то выполняется команда выхода (jump exit).
- Если нажата клавиша Esc (27), то выполняется команда выхода (jump exit).
- Проверка, является ли введенный символ числом (0-9).
- Если введенный символ меньше, чем 0Dh (значение переменной DH), то выполняется команда для других символов.
- Если введенный символ больше или равен 0Dh, то выполняется команда для чисел.
- Если введенный символ является числом, то увеличивается значение переменной «номер» на 31h.
- Если введенный символ является другим символом, то увеличивается значение переменной «другие» на 1.
- Если введенный символ не является числом или другим символом, то выполняется команда для других символов.
- Запись введенного числа в буфер (необходимо дополнительно исследовать, что именно записывается).
- Запись в файл (INT 21H с аргументами 40h, BX, CX, DX и 3).
- Запись в другой файл (INT 21H с аргументами 3eh, BX и CX).
- Переменная «номер» равна 0.
- Переменная «другие» равна 0.
- Переменная «handler» равна 0.
- Переменная «buflen» равна 0.
- Переменная «bufnum» равна пробелу (' ').
- Переменная «filename» равна
num.txt
. - Переменная «buf6» равна
other simbol:
, 13,10,$
. - Переменная «buflen6» равна 0.
- Переменная «handler6» равна 0.
- Переменная «filename6» равна
other.txt
.