Заменить символы 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 и прочие
Объяснение кода листинга программы
- Сначала происходит сравнение символа в регистре AH с 'A'.
- Если символ равен 'A', то выполняется переход к метке @@ProcessAEI.
- Если символ не равен 'A', то происходит сравнение с 'E'.
- Если символ равен 'E', то также выполняется переход к метке @@ProcessAEI.
- Если символ не равен 'E', то происходит сравнение с 'I'.
- Если символ равен 'I', то снова выполняется переход к метке @@ProcessAEI.
- Если символ не равен 'I', то происходит переход к метке @@SkipProcessAEI.
- Переменная BX увеличивается на единицу.
- Выполняется движение символа '$' в регистр AH.
- В памяти по адресу, который хранится в BX, записывается символ из регистра AH.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д