Удаление пробелов в начале строки. Из .com в .exe - Assembler
Формулировка задачи:
Пробую переписать программу в exe, не получается
Рабочий вариант в .com формате
Нерабочий вариант в exe формате
Не пойму, что не так. Помогите пожалуйста!
Листинг программы
- .model tiny
- .286
- .code
- org 100h
- start: mov ax,3
- int 10h; очищаю экран
- mov ah,9
- mov dx,offset string1
- int 21h; вывожу строку приглашение
- mov ah,0Ah
- mov dx,offset buffer
- int 21h; получаю строку с клавиатуры
- mov ch,0
- mov al,20h; код пробела
- mov cl,buffer[1]; в СХ количество символов введенных в буфер
- mov bx,cx
- mov di,offset buffer+2
- repe scasb; ищу где заканчиваются пробелы
- dec di
- mov ah,9
- mov dx,offset string2; вывожу первую половину строки
- int 21h
- mov buffer[bx+2],'$'; там, где заканчивается строка в буфере ставлю '$'
- mov dx,di
- int 21h; вывожу вторую половину строки
- mov ah,0
- int 16h; жду пока не нажмут на клавиатуру
- ret; выхожу из программы
- string1 db 'Vvedite frazu(ne bolee 80 simvolov): ',0Dh,0Ah,'$'
- buffer db 81,?,81 dup (?)
- string2 db 0Dh,0Ah,'Ispravlennaya fraza: $'
- end start
Листинг программы
- .model small; один сегмент кода, данных и стека
- .stack 100h; отвести под стек 256 байт
- .data; начало сегмента данных
- string1 db 'Vvedite frazu(ne bolee 80 simvolov): ',0Dh,0Ah,'$'
- buffer db 81,?,81 dup (?)
- string2 db 0Dh,0Ah,'Ispravlennaya fraza: $'
- .code
- mov ax,@data ; установка в ds адpеса
- mov ds,ax ; сегмента данных
- mov ax,3
- int 10h
- mov ah,9
- mov dx,offset string1
- int 21h; вывожу строку приглашение
- mov ah,0Ah
- mov dx,offset buffer
- int 21h; получаю строку с клавиатуры
- mov ch,0
- mov al,20h; код пробела
- mov cl,buffer[1]; в СХ количество символов введенных в буфер
- mov bx,cx
- mov di,offset buffer+2
- repe scasb; ищу где заканчиваются пробелы
- dec di
- mov ah,9
- mov dx, offset string2; вывожу первую половину строки
- ;add dl, '0'
- int 21h
- mov buffer[bx+2],'$'; там, где заканчивается строка в буфере ставлю '$'
- mov dx,di
- int 21h; вывожу вторую половину строки
- mov ah,0
- int 16h; жду пока не нажмут на клавиатуру
- .exit(0)
- end
Решение задачи: «Удаление пробелов в начале строки. Из .com в .exe»
textual
Листинг программы
- mov di,offset buffer+2
- mov buffer[bx+2],'$';
Объяснение кода листинга программы
mov di,offset buffer+2
- Переменнаяdi
получает смещение в памяти, где будет записываться результат работы программы. В данном случае, смещение равно2
(или 0x2), после чего прибавляетсяoffset buffer
(смещение буфера).mov buffer[bx+2],'$'
- Записывает символ доллара ($) в буфер по смещениюbx+2
. Здесьbuffer
- это область памяти, где хранится исходная строка, аbx
- это регистр, содержащий индекс текущей позиции в строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д