Не работает ввод с клавиатуры - Assembler
Формулировка задачи:
Добрый день,
Помогите пожалуйсто исправить ошибку в коде
Заранее спасибо.
Листинг программы
- org 100h
- jmp start
- array db 254 ;максимально допустимая
- len db 0 ;действительная длина данных
- buf db 254 dup (0);буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)
- mov ah,0ah
- lea dx,array
- int 21h
- jc exit
- fName db 'data.txt',0 ; имя файла
- start: ;
- mov ah,9 ; покажем массив на экране
- mov dx,array ;
- int 21h ;
- mov ah,3Ch ; создать файл!
- mov dx,fName ;
- mov cx,20h ;
- int 21h ;
- xchg ax,bx ;
- mov ah,40h ; запись в файл!
- mov cx,len ;
- mov dx,array ;
- int 21h ;
- mov ah,3Eh ; закрыть файл!
- int 21h ;
- ;---------------------------------------------------------------------—
- mov cx,len ; сортировка массива —-----------------//
- dec cx ;
- mov si,array ;
- mov di,si ;
- sort: push cx di si ;
- xor bx,bx ; флаг перестановок
- fuck: lodsw ;
- cmp ah,al ;
- jae @@1 ;
- inc bx ;
- xchg ah,al ;
- @@1: stosw ;
- dec si ;
- dec di ;
- loop fuck ;
- pop si di cx ;
- or bx,bx ; перестановки были?
- jnz sort ;
- ;---------------------------------------------------------------------—
- mov al,10 ; выводим отсортированный массив на экран
- int 29h ;
- mov ah,9 ;
- mov dx,array ;
- int 21h ;
- exit:
- xor ax,ax ;
- int 16h ;
- int 20h ;
Решение задачи: «Не работает ввод с клавиатуры»
textual
Листинг программы
- org 100h
- jmp start
- array db 254 ;максимально допустимая
- len db 0 ;действительная длина данных
- buf db 254 dup (0);буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)
- mov ah,0ah
- mov dx,array
- int 21h,'$'
- jc exit
- fName db 'data.txt',0 ; имя файла
- start: ;
- mov ah,9 ; покажем массив на экране
- mov dx,array ;
- int 21h ;
- mov ah,3Ch ; создать файл!
- mov dx,fName ;
- mov cx,20h ;
- int 21h ;
- xchg ax,bx ;
- mov ah,40h ; запись в файл!
- mov cx,len ;
- mov dx,array ;
- int 21h ;
- mov ah,3Eh ; закрыть файл!
- int 21h ;
- ;---------------------------------------------------------------------—
- mov cx,len ; сортировка массива —-----------------//
- dec cx ;
- mov si,array ;
- mov di,si ;
- sort: push cx di si ;
- xor bx,bx ; флаг перестановок
- fuck: lodsw ;
- cmp ah,al ;
- jae @@1 ;
- inc bx ;
- xchg ah,al ;
- @@1: stosw ;
- dec si ;
- dec di ;
- loop fuck ;
- pop si di cx ;
- or bx,bx ; перестановки были?
- jnz sort ;
- ;---------------------------------------------------------------------—
- mov al,10 ; выводим отсортированный массив на экран
- int 29h ;
- mov ah,9 ;
- mov dx,array ;
- int 21h ;
- exit:
- xor ax,ax ;
- int 16h ;
- int 20h ;
Объяснение кода листинга программы
- Организация ввода-вывода:
- Ввод данных с клавиатуры (переменная buf) и их вывод на экран (переменная array) с помощью функции BIOS int 21h.
- Переменная len используется для хранения реальной длины введенных данных.
- Переменная fName используется для хранения имени файла.
- Организация работы с файлами:
- Создание файла с помощью функции BIOS int 21h.
- Запись данных из массива в файл с помощью функции BIOS int 21h.
- Закрытие файла с помощью функции BIOS int 21h.
- Сортировка массива:
- Использование алгоритма сортировки пузырьком.
- Переменные si и di используются для индексации массива.
- Переменная bx используется для хранения флага перестановок.
- Цикл sort выполняет перестановки до тех пор, пока не будет выполнено условие (переменная bx не равна 0).
- Вывод отсортированного массива на экран с помощью функции BIOS int 29h.
- Окончание работы программы:
- Завершение работы программы с помощью функции BIOS int 16h и int 20h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д