Заменить все буквенные символы латинского алфавита в исходной строке на символ, введенный с клавиатуры - Assembler/emu8086
Формулировка задачи:
Написать программу, заменяющую все буквенные символы латинского алфавита в исходной строке на символ, введенный с клавиатуры. Вывести на экран исходную и результирующую строки. Вывести на экран сообщение о завершении программы. Использовать прерывания BIOS.
Проблема в том, что выводит все сообщения в одну строку, работает правильно(кроме ввода, его еще не делал). Запускал пошагово и видно, что все нормально выводит, но потом затирается другим сообщением. И еще хотел спросить, как правильно ввести символ с помощью BIOS прерывания?
data segment string db 10, 13, 'ab4*c50$' message1 db 'Vvedite simvol dlya zameni: $' message2 db 10, 13, 'Stroka do izmeneniy: $' message3 db 10, 13, 'Stroka posle izmeneniy: $' ends stack segment dw 128 dup(0) ends code segment start: mov AX, data mov DS, AX mov ES, AX ;начало вывода сообщения mov AL, 1 mov BH, 0 mov BL, 0011_1011b mov CX, 28 mov DL, 0 mov DH, 0 mov BP, offset message1 mov AH, 13h int 10h ;конец вывода сообщения mov AL, 1 mov BH, 0 mov BL, 0011_1011b mov CX, 23 mov DL, 0 mov DH, 0 mov BP, offset message2 mov AH, 13h int 10h mov AL, 1 mov BH, 0 mov BL, 0011_1011b mov CX, 9 mov DL, 0 mov DH, 0 mov BP, offset string mov AH, 13h int 10h mov AL, 2Bh mov BL, AL lea SI, string mov DI, SI mov CX, 7 ;кол-во повторений cld metka: lodsb ;берем по одному байту из строки cmp AL, 41h jl metka1 cmp AL, 7Ah jg metka1 mov AL, BL mov DI, SI dec DI stosb metka1: loop metka mov AL, 1 mov BH, 0 mov BL, 0011_1011b mov CX, 26 mov DL, 0 mov DH, 0 mov BP, offset message3 mov AH, 13h int 10h mov AL, 1 mov BH, 0 mov BL, 0011_1011b mov CX, 9 mov DL, 0 mov DH, 0 mov BP, offset string mov AH, 13h int 10h mov AX, 4c00h int 21h ends end start
Решение задачи: «Заменить все буквенные символы латинского алфавита в исходной строке на символ, введенный с клавиатуры»
textual
Листинг программы
data segment ......... NewLine db 13,10,'$' ends code segment ............ mov ah,9 lea dx,NewLine int 21h ends
Объяснение кода листинга программы
В данном коде, который написан на языке Assembler, выполняется замена всех буквенных символов латинского алфавита в исходной строке на символ, введенный с клавиатуры. Список действий следующий:
- mov ah,9 - переменной
ah
присваивается значение 9, которое является кодом функции вывода строки. - lea dx,NewLine - переменная
dx
указывает на строкуNewLine
, которая содержит символ перевода строки (13,10,'$'). - int 21h - выполняется функция вывода строки с использованием значения переменной
ah
.