Ошибка в программе по замене символов - 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 ;переход
Объяснение кода листинга программы
- Сравнивается значение переменной AH с символом '/'.
- Название переменной: AH
- Значение переменной: '/'
- Если значение переменной AH меньше символа '/', то происходит переход на метку MT2.
- Сравнивается значение переменной AH с символом '/'.
- Название переменной: AH
- Значение переменной: '/'
- Если значение переменной AH больше символа '/', то происходит переход на метку MT2.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д