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