Удаление пробелов в начале строки. Из .com в .exe - Assembler

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

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

Пробую переписать программу в exe, не получается Рабочий вариант в .com формате
Листинг программы
  1. .model tiny
  2. .286
  3. .code
  4. org 100h
  5. start: mov ax,3
  6. int 10h; очищаю экран
  7. mov ah,9
  8. mov dx,offset string1
  9. int 21h; вывожу строку приглашение
  10. mov ah,0Ah
  11. mov dx,offset buffer
  12. int 21h; получаю строку с клавиатуры
  13. mov ch,0
  14. mov al,20h; код пробела
  15. mov cl,buffer[1]; в СХ количество символов введенных в буфер
  16. mov bx,cx
  17. mov di,offset buffer+2
  18. repe scasb; ищу где заканчиваются пробелы
  19. dec di
  20. mov ah,9
  21. mov dx,offset string2; вывожу первую половину строки
  22. int 21h
  23. mov buffer[bx+2],'$'; там, где заканчивается строка в буфере ставлю '$'
  24. mov dx,di
  25. int 21h; вывожу вторую половину строки
  26. mov ah,0
  27. int 16h; жду пока не нажмут на клавиатуру
  28. ret; выхожу из программы
  29. string1 db 'Vvedite frazu(ne bolee 80 simvolov): ',0Dh,0Ah,'$'
  30. buffer db 81,?,81 dup (?)
  31. string2 db 0Dh,0Ah,'Ispravlennaya fraza: $'
  32. end start
Нерабочий вариант в exe формате
Листинг программы
  1. .model small; один сегмент кода, данных и стека
  2. .stack 100h; отвести под стек 256 байт
  3. .data; начало сегмента данных
  4. string1 db 'Vvedite frazu(ne bolee 80 simvolov): ',0Dh,0Ah,'$'
  5. buffer db 81,?,81 dup (?)
  6. string2 db 0Dh,0Ah,'Ispravlennaya fraza: $'
  7. .code
  8.  
  9. mov ax,@data ; установка в ds адpеса
  10. mov ds,ax ; сегмента данных
  11. mov ax,3
  12. int 10h
  13. mov ah,9
  14. mov dx,offset string1
  15. int 21h; вывожу строку приглашение
  16. mov ah,0Ah
  17. mov dx,offset buffer
  18. int 21h; получаю строку с клавиатуры
  19. mov ch,0
  20. mov al,20h; код пробела
  21. mov cl,buffer[1]; в СХ количество символов введенных в буфер
  22. mov bx,cx
  23. mov di,offset buffer+2
  24. repe scasb; ищу где заканчиваются пробелы
  25. dec di
  26. mov ah,9
  27. mov dx, offset string2; вывожу первую половину строки
  28. ;add dl, '0'
  29. int 21h
  30. mov buffer[bx+2],'$'; там, где заканчивается строка в буфере ставлю '$'
  31. mov dx,di
  32. int 21h; вывожу вторую половину строки
  33. mov ah,0
  34. int 16h; жду пока не нажмут на клавиатуру
  35. .exit(0)
  36. end
Не пойму, что не так. Помогите пожалуйста!

Решение задачи: «Удаление пробелов в начале строки. Из .com в .exe»

textual
Листинг программы
  1. mov di,offset buffer+2
  2. mov buffer[bx+2],'$';

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

  1. mov di,offset buffer+2 - Переменная di получает смещение в памяти, где будет записываться результат работы программы. В данном случае, смещение равно 2 (или 0x2), после чего прибавляется offset buffer (смещение буфера).
  2. mov buffer[bx+2],'$' - Записывает символ доллара ($) в буфер по смещению bx+2. Здесь buffer - это область памяти, где хранится исходная строка, а bx - это регистр, содержащий индекс текущей позиции в строке.

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


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

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

10   голосов , оценка 3.6 из 5

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

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

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