Не работает ввод с клавиатуры - 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 ;

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

  1. Организация ввода-вывода:
    • Ввод данных с клавиатуры (переменная buf) и их вывод на экран (переменная array) с помощью функции BIOS int 21h.
    • Переменная len используется для хранения реальной длины введенных данных.
    • Переменная fName используется для хранения имени файла.
  2. Организация работы с файлами:
    • Создание файла с помощью функции BIOS int 21h.
    • Запись данных из массива в файл с помощью функции BIOS int 21h.
    • Закрытие файла с помощью функции BIOS int 21h.
  3. Сортировка массива:
    • Использование алгоритма сортировки пузырьком.
    • Переменные si и di используются для индексации массива.
    • Переменная bx используется для хранения флага перестановок.
    • Цикл sort выполняет перестановки до тех пор, пока не будет выполнено условие (переменная bx не равна 0).
    • Вывод отсортированного массива на экран с помощью функции BIOS int 29h.
  4. Окончание работы программы:
    • Завершение работы программы с помощью функции BIOS int 16h и int 20h.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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