Ошибка в программе по замене символов - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д