Ошибка в программе по замене символов - Assembler

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

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

Ребята, подскажите что не так начинающему. Изучаю язык самостоятельно, писал программу для задания по лабораторной работе (/ заменить на \, все заглавные строчными). Не получается заменить / на \, не понимаю, что не так. Код:
TITLE  l5 - ЗАМЕНА / на \, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ
;---------------------------------------------------------------------------------------
 
    DATASG    SEGMENT   PARA
    VAR       DB         '           Вариант №7              ' ,13,10,'          ------------',13,10,'$' 
    VARR      DB         '         Исходный текст              ' ,13,10,'        ----------------',13,10,'$'    
          TEXTT     DB  '   /The capital of the country is London./' ,13,10, '   ---------------------------',13,10,'$'

    VAR_1     DB         'a) Zamenit vse / na \' ,13,10,'$' 
    VAR_2     DB         'b) Zamenit vse zaglavnye strochnymi' ,13,10,'$'  
    MYTEXT   DB '/The capital of the country is London./' ,13,10, '----------------------------',13,10,'$'
    DATASG  ENDS
 
    STACKSG     SEGMENT      'Stack'        
        DB  27 DUP(?)
    STACKSG   ENDS
 
 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG
 
    CODESG  SEGMENT PARA 'Code' 
    BEGIN   PROC FAR
;--------------------------------------------------------------------------------------;        
        MOV  AH, 00H;AH           ; функция задания режима экрана
                    MOV  AL, 03H;AL           ; ЦВ текстовый, 25 строк по 80 знаков
                    INT  10H    
                    
;--------------------------------------------------------------------------------------;
        PUSH    DS                  ;в стек
        SUB     AX,AX               ;обнуляем AX 
        PUSH    AX                  ;AX в стек
        MOV     AX, DATASG          ;DATASG в AX 
        MOV     DS, AX              ;AX В DS 
        LEA     BX, MYTEXT          ;вывод MYTEXE в BX
        MOV     CX, 20H             ;20H в CX резервируем память в CX   
;-----------------------------------------------------------------------------------;       
              LEA   DX,VAR              ;вывод варианта
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
;-----------------------------------------------------------------------------------;
                    
        LEA     DX,VARR             ;вывод VARR
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
        LEA     DX,TEXTT            ;вывод TEXTT 
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
        LEA     DX,VAR_1            ;вывод VAR_1
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
        
;-----------------------------------------------------------------------------------;   
    MT1:    MOV     AH, [BX]            ;BX т.е текст MYTEXT В AH побайтно
        CMP     AH, byte ptr '/'    ;сравнение AH с /
        JB  MT2                 ;переход   
        CMP     AH, byte ptr '/'    ;сравнение AH c /
        JA  MT2                 ;переход  
        CALL    COR                 ;вызов проседуры  COR
        
    MT2:    INC     BX                  ;увеличиваем BX на 1 
        LOOP MT1                    ;цикл со счетчиком если 1 то на метку MT1 иначе дальше
        LEA     DX, MYTEXT          ;вывод MYTEXE
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
        JMP       WERT              ;безусловный переход на WERT
 
;----------------------------------------------------------------------------;      
    RET                                 ;выход из проседуры
        BEGIN   ENDP                        ;конец процедуры   
 
    COR PROC     NEAR               ;процедура COR  
    NOP                           ;нет операции
        ;ADD AH,byte ptr '\'        ;преобразовать '/' в '\' 
        AND     AH, 0DFH;0DFH       ;логическое умножение
        MOV     [BX], AH            ;AH в BX 
    RET                                 ;выход из процедуры
    COR ENDP
    
;----------------------------------------------------------------------------;
;----------------------------------------------------------------------------;  
WERT:   
    BEGINN  PROC FAR
    
        PUSH    DS                  ;в стек
        SUB     AX,AX               ;обнуляем AX 
        PUSH    AX                  ;AX в стек
        MOV     AX, DATASG          ;DATASG в AX 
        MOV     DS, AX              ;AX В DS 
        LEA     BX, MYTEXT          ;вывод MYTEXE в BX
        MOV     CX, 20H             ;10H в CX резервируем память в CX   
;-----------------------------------------------------------------------------------;       
              LEA   DX,VAR_2            ;вывод VAR_2
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H 
;-----------------------------------------------------------------------------------;   
    MTT1:   MOV     AH, [BX]            ;BX т.е текст MYTEXT В AH побайтно
        CMP     AH, 41H;61H         ;сравнение AH с A-большой англиское
        JB  MTT2                ;переход по сравнению   
        CMP     AH, 5AH;7AH         ;сравнение AH c Z-большой англиское
        JA  MTT2                ;переход по сравнению  
        CALL    CORR                ;вызов проседуры  CORR
        
    MTT2:   INC     BX                  ;безусловный переход на BX 
        LOOP MTT1                      ;цикл со счетчиком если 1 то на метку MT1 иначе дальше
        LEA     DX, MYTEXT          ;вывод MYTEXE
        MOV     AH, 09H             ;вывод на экран
        INT     21H                 ;прерывание 21H
        JMP       TREW 
;----------------------------------------------------------------------------;                      
        RET                           ;
    
    BEGINN   ENDP                            ;   
 
    CORR    PROC     NEAR               ;  
        NOP                           ;
        ADD AH,20H                    ;
        ;AND    AH, 0DFH;0DFH       ;
        MOV     [BX], AH            ; 
        RET                           ;
    CORR    ENDP
;-------------------------------------------------------------      
TREW:
            mov ax,00h
      int 16h                              ;
;-------------------------------------------------------------              
            MOV AX,4C00H                 ;  
            INT 21H                        ;   
                          
    CODESG  ENDS
    END BEGIN

Решение задачи: «Ошибка в программе по замене символов»

textual
Листинг программы
CMP AH, byte ptr '/' ;сравнение AH с /
JB MT2 ;переход 
CMP AH, byte ptr '/' ;сравнение AH c /
JA MT2 ;переход

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

  1. Сравнивается значение переменной AH с символом '/'.
    • Название переменной: AH
    • Значение переменной: '/'
  2. Если значение переменной AH меньше символа '/', то происходит переход на метку MT2.
  3. Сравнивается значение переменной AH с символом '/'.
    • Название переменной: AH
    • Значение переменной: '/'
  4. Если значение переменной AH больше символа '/', то происходит переход на метку MT2.

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

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