Найти в строке символ 'h', заменить его на ноль. Перенести эту строку в основной сегмент данных. - Assembler
Формулировка задачи:
в вспомогательном сегменте данных задана строка символов 'abcdefghkl'. найти в этой строке символ 'h', заменить его на ноль. перенести эту строку в основной сегмент данных. вывести сформированную строку на экран. помогите пожалуйстста, кто может
Решение задачи: «Найти в строке символ 'h', заменить его на ноль. Перенести эту строку в основной сегмент данных.»
textual
Листинг программы
data segment
str2 db 20 dup('$')
data ends
ext segment
str1 db 'abcdefghkl'
len1 = $-str1
ext ends
stk segment stack
db 256 dup(?)
stk ends
code segment
assume cs:code, ds:data, es:ext, ss:stk
start:
mov ax,data
mov ds,ax
mov ax,ext
mov es,ax
mov al,'h'
lea di,str1
mov cx,len1
repne scasb
jnz skip
mov byte ptr es:[di-1],30h
skip:
lea si,str2
lea di,str1
mov cx,len1
action:
mov al,byte ptr es:[di]
mov byte ptr ds:[si],al
inc si
inc di
loop action
mov ah,09h
lea dx,str2
int 21h
exit:
mov ah,4Ch
mov al,00h
int 21h
code ends
end start
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Подготовка сегментов данных и стека.
- Замена всех вхождений символа 'h' на ноль в строке из сегмента EXT, используя стек для временного хранения символов.
- Перенос измененной строки в сегмент DATA.
- Вывод строки на экран с помощью функции 21h.
- Завершение работы программы с помощью функции 4Ch.