Заменить символы A, E, I на $ - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите пожалуйста доделать доп задание к лабораторной, последняя осталась. По заданию дан алфавит в верхнем регистре нужно: 1. согласные буквы от B до L преобразовать в нижний регистр (это вроде сделал) 2. все гласные от A до I (A, E, I) заменить на $ (это не смог) PS. код не мой он был в методички я лишь разобрался с ни как смог
DATASG SEGMENT PARA
    MYTEXT DB   'ABCDEGHIJKLMNOPQRSTUVWXYZ' ,13,10, '$'
DATASG ENDS
 
STACKSG SEGMENT 'Stack'     
    DB 12 DUP(?)
STACKSG ENDS
 
CODESG SEGMENT PARA 'Code'
    
BEGIN PROC FAR
    ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
    PUSH DS             ; сохраняем сегмент данных в стек
    SUB AX, AX          ; Обнуляем AX
    PUSH AX             ; сохраняем содержимое АХ в стек
    MOV AX, DATASG      ; заносим в сегментный
    MOV DS, AX          ; регистр DS адрес сегмента данных
    LEA BX, MYTEXT      ; заносим в BX адрес начального символа переменной Mytext
    MOV CX, 19H         ; Вносим в СХ значение 17Н - параметр цикла
    
    MOV AH, 09H             ;
    MOV DX, OFFSET MYTEXT   ;
    INT 21H                 ; вывода на экран
 
    MT1:    
        MOV AH, [BX]    ; Метка1: заносим в АН код первого символа переменной Mytext
        CMP AH, 42H     ; Сравниваем значения регистра AH и кода символа 41Н (символа A)
        JB MT2          ; преход к метке 2 если код, лежащий в AH больше 41H (символ старше A в таблице ASCII)
        CMP AH, 4CH     ; Сравниваем значения регистра AH и кода символа 5АН (символа Z)
        JA MT2          ; преход к метке 2 если код, лежащий в AH меньше 5АH (символ младше Z в таблице ASCII)
        CALL COR        ; вызов процедуры COR

    MT2:
        INC BX          ; Метка 2: увеличиваем значение в BX на 1
        LOOP MT1        ; Цикл с параметром, лежащим в СХ, передающий управление коду под меткой 1.
        LEA DX, MYTEXT  ; Заносим в DX адрес переменной MYTEXT для вывода на экран
        MOV AH, 09H     ; оформляем функцию DOS
        INT 21H         ; вывода на экран
        RET             ; воврат
        
BEGIN ENDP
 
COR PROC NEAR           ; Начало процедуры COR
    NOP                 ; пауза
    ADD AH, 20H         ; прибавляем к коду символа смещение 20H по таблице ASCII
    MOV [BX], AH        ; занесение в ячейку с адресом, лежащим в BX, кода символа из AH
    RET                 ; воврат 
COR ENDP                ; завершение процедуры
 
CODESG ENDS
END BEGIN

Решение задачи: «Заменить символы A, E, I на $»

textual
Листинг программы
MT2:
        cmp ah, 'A'
        je @@ProcessAEI
        cmp ah, 'E'
        je @@ProcessAEI
        cmp ah, 'I'
        je @@ProcessAEI
        jmp @@SkipProcessAEI
@@ProcessAEI:
        mov ah, '$'
        mov [bx], ah
@@SkipProcessAEI:
;тут пойдут существующие строки INC BX и прочие

Объяснение кода листинга программы

  1. Сначала происходит сравнение символа в регистре AH с 'A'.
  2. Если символ равен 'A', то выполняется переход к метке @@ProcessAEI.
  3. Если символ не равен 'A', то происходит сравнение с 'E'.
  4. Если символ равен 'E', то также выполняется переход к метке @@ProcessAEI.
  5. Если символ не равен 'E', то происходит сравнение с 'I'.
  6. Если символ равен 'I', то снова выполняется переход к метке @@ProcessAEI.
  7. Если символ не равен 'I', то происходит переход к метке @@SkipProcessAEI.
  8. Переменная BX увеличивается на единицу.
  9. Выполняется движение символа '$' в регистр AH.
  10. В памяти по адресу, который хранится в BX, записывается символ из регистра AH.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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