Не работает ввод с клавиатуры - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д