Не работает ввод с клавиатуры - Assembler

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

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

Добрый день, Помогите пожалуйсто исправить ошибку в коде
Листинг программы
  1. org 100h
  2. jmp start
  3. array db 254 ;максимально допустимая
  4. len db 0 ;действительная длина данных
  5. buf db 254 dup (0);буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)
  6. mov ah,0ah
  7. lea dx,array
  8. int 21h
  9. jc exit
  10. fName db 'data.txt',0 ; имя файла
  11. start: ;
  12. mov ah,9 ; покажем массив на экране
  13. mov dx,array ;
  14. int 21h ;
  15. mov ah,3Ch ; создать файл!
  16. mov dx,fName ;
  17. mov cx,20h ;
  18. int 21h ;
  19. xchg ax,bx ;
  20. mov ah,40h ; запись в файл!
  21. mov cx,len ;
  22. mov dx,array ;
  23. int 21h ;
  24. mov ah,3Eh ; закрыть файл!
  25. int 21h ;
  26. ;---------------------------------------------------------------------—
  27. mov cx,len ; сортировка массива —-----------------//
  28. dec cx ;
  29. mov si,array ;
  30. mov di,si ;
  31. sort: push cx di si ;
  32. xor bx,bx ; флаг перестановок
  33. fuck: lodsw ;
  34. cmp ah,al ;
  35. jae @@1 ;
  36. inc bx ;
  37. xchg ah,al ;
  38. @@1: stosw ;
  39. dec si ;
  40. dec di ;
  41. loop fuck ;
  42. pop si di cx ;
  43. or bx,bx ; перестановки были?
  44. jnz sort ;
  45. ;---------------------------------------------------------------------—
  46. mov al,10 ; выводим отсортированный массив на экран
  47. int 29h ;
  48. mov ah,9 ;
  49. mov dx,array ;
  50. int 21h ;
  51. exit:
  52. xor ax,ax ;
  53. int 16h ;
  54. int 20h ;
Заранее спасибо.

Решение задачи: «Не работает ввод с клавиатуры»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. array db 254 ;максимально допустимая
  5. len db 0 ;действительная длина данных
  6. buf db 254 dup (0);буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)
  7. mov ah,0ah
  8. mov dx,array
  9. int 21h,'$'
  10. jc exit
  11. fName db 'data.txt',0 ; имя файла
  12.  
  13. start: ;
  14. mov ah,9 ; покажем массив на экране
  15. mov dx,array ;
  16. int 21h ;
  17.  
  18. mov ah,3Ch ; создать файл!
  19. mov dx,fName ;
  20. mov cx,20h ;
  21. int 21h ;
  22. xchg ax,bx ;
  23. mov ah,40h ; запись в файл!
  24. mov cx,len ;
  25. mov dx,array ;
  26. int 21h ;
  27. mov ah,3Eh ; закрыть файл!
  28. int 21h ;
  29. ;---------------------------------------------------------------------—
  30. mov cx,len ; сортировка массива —-----------------//
  31. dec cx ;
  32. mov si,array ;
  33. mov di,si ;
  34. sort: push cx di si ;
  35. xor bx,bx ; флаг перестановок
  36. fuck: lodsw ;
  37. cmp ah,al ;
  38. jae @@1 ;
  39. inc bx ;
  40. xchg ah,al ;
  41. @@1: stosw ;
  42. dec si ;
  43. dec di ;
  44. loop fuck ;
  45. pop si di cx ;
  46. or bx,bx ; перестановки были?
  47. jnz sort ;
  48. ;---------------------------------------------------------------------—
  49. mov al,10 ; выводим отсортированный массив на экран
  50. int 29h ;
  51. mov ah,9 ;
  52. mov dx,array ;
  53. int 21h ;
  54.  
  55. exit:
  56. xor ax,ax ;
  57. int 16h ;
  58. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы