Заменить все буквенные символы латинского алфавита в исходной строке на символ, введенный с клавиатуры - 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, выполняется замена всех буквенных символов латинского алфавита в исходной строке на символ, введенный с клавиатуры. Список действий следующий:

  1. mov ah,9 - переменной ah присваивается значение 9, которое является кодом функции вывода строки.
  2. lea dx,NewLine - переменная dx указывает на строку NewLine, которая содержит символ перевода строки (13,10,'$').
  3. int 21h - выполняется функция вывода строки с использованием значения переменной ah.

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

12   голосов , оценка 4.167 из 5
Похожие ответы