Замена одной скобки на другую - Assembler

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

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

Здравствуйте, есть код программы которая в теории должно в заданном тексте менять все заглавные буквы на строчные (с чем она кстати прекрасно справляется). Но второе задание заменить все символы '(' на ')'. Увы, программа игнорирует это условие (JNE). При чем если изменить условие на равно (JE) программа почти все что есть меняет на ')' символ, помогите пожалуйста разобраться с кодом. Понимаю что, методы реализации скорее всего древние, но таковы условия. Код:
 ;  Резервируем область памяти для размещения переменных 
DATASG    SEGMENT   PARA
; Директива Byte (DB) определяет  беззнаковый байт
MYTEXT   DB 'tEXt ex(AMP)le' ,13,10, '$'  ;  знак конца строки  $
DATASG  ENDS
STACKSG     SEGMENT      'Stack'        
DB  12 DUP(?)
STACKSG   ENDS
CODESG  SEGMENT PARA 'Code'
BEGIN   PROC FAR
;Настроим сегментные регистры 
;SS-указывает на стек; CS-машинные команды, DS- на переменные
ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG
PUSH    DS                                ;Корректное 
SUB     AX,AX                                   ;завершение
PUSH    AX                                ;программы.
MOV     AX, DATASG                  ;Инициализация
MOV     DS, AX                          ;сегментного регистра DS.
LEA     BX, MYTEXT                           ;Загрузим текущий адрес строки в регистр BX
MOV     CX, 10H                         ;Установим счетчик на 16 байт (символов) 
 
MT1:                                             ;Начало цикла
MOV     AH, [BX]                        ;Загрузим в регистр символ из строки
                                 ;Перевод заглавных букв в строчные                                            
                             ;Кодировка заглавных букв идет от 41Н до 5AH (A...Z)
CMP     AH, 41H                          ;Сравним символ строки с ASCII кодом символа 'A'
JB  MT2                                  ;Если этот код меньше 'A' то переход
CMP     AH, 5AH                      ;Сравним символ строки с ASCII кодом символа 'Z'
JA  MT                               ;Если этот код больше 'Z' то переход   
                             ;Значит это заглавная буква 
CALL    COR1                             ;Переделаем ее в прописную
 
MT:                                                  ;Сюда попадем если не найдем заглавную букву
                             ;Замена '(' на ')'                                   
CMP     AH, '('                          ;Сравним символ строки
JNE     MT2                              ;Если этот код не равен символу '(' то переход  
                             ;Значит это '('
CALL    COR                              ;Процедура замены скобки  
 
MT2:                                         ;Действие не требуется 
INC     BX                                   ;Перейдем к следующему символу строки
NOP
LOOP MT1                                 ;Повтор Цикла
                             ;Вывод строки на экран 
LEA     DX, MYTEXT                   ;в DX - адрес строки
MOV     AH, 09H                         ;Прерывание ДОС  
INT     21H                                       ;для вывода на экран
RET
BEGIN   ENDP
                                ;Процедура замены скобки 
COR PROC     NEAR                   ;Начало процедуры
NOP                       
MOV     AH, ')'                     ;Переделаем скобку
MOV     [BX], AH                        ;Заменим символ 
RET
COR ENDP                                ;Конец процедуры   ;Процедура перевода заглавной буквы в прописную 
                            ;Процедура перевода заглавного символа в прописной 
COR1    PROC     NEAR           ;Начало процедуры
NOP                       
ADD     AH,20H                          ;Переделаем заглавную букву в прописную
MOV     [BX], AH                ;Заменим заглавный символ прописным 
RET
COR1    ENDP                            ;Конец процедуры 
CODESG  ENDS
END BEGIN

Решение задачи: «Замена одной скобки на другую»

textual
Листинг программы
if(al>='A')&&(al<='Z')
  lowcase(al)
else
  if(al>='a')&&(al<='z')
    highcase(al)
  else
    if(al=='(')
      al=')'

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

  1. Проверка условия: если символ al больше или равен 'A' и меньше или равно 'Z'.
  2. Вызов функции lowcase с аргументом al.
  3. Проверка условия: если символ al больше или равен 'a' и меньше или равно 'z'.
  4. Вызов функции highcase с аргументом al.
  5. Проверка условия: если символ al равен ')'.
  6. Замена символа al на '('.

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


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

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

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