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

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

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

Ребята, подскажите что не так начинающему. Изучаю язык самостоятельно, писал программу для задания по лабораторной работе (/ заменить на \, все заглавные строчными). Не получается заменить / на \, не понимаю, что не так. Код:
Листинг программы
  1. TITLE l5 - ЗАМЕНА / на \, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ
  2. ;---------------------------------------------------------------------------------------
  3. DATASG SEGMENT PARA
  4. VAR DB ' Вариант №7 ' ,13,10,' ------------',13,10,'$'
  5. VARR DB ' Исходный текст ' ,13,10,' ----------------',13,10,'$'
  6. TEXTT DB ' /The capital of the country is London./' ,13,10, ' ---------------------------',13,10,'$'
  7.  
  8. VAR_1 DB 'a) Zamenit vse / na \' ,13,10,'$'
  9. VAR_2 DB 'b) Zamenit vse zaglavnye strochnymi' ,13,10,'$'
  10. MYTEXT DB '/The capital of the country is London./' ,13,10, '----------------------------',13,10,'$'
  11. DATASG ENDS
  12. STACKSG SEGMENT 'Stack'
  13. DB 27 DUP(?)
  14. STACKSG ENDS
  15. ASSUME SS:STACKSG, CS:CODESG, DS:DATASG
  16. CODESG SEGMENT PARA 'Code'
  17. BEGIN PROC FAR
  18. ;--------------------------------------------------------------------------------------;
  19. MOV AH, 00H;AH ; функция задания режима экрана
  20. MOV AL, 03H;AL ; ЦВ текстовый, 25 строк по 80 знаков
  21. INT 10H
  22. ;--------------------------------------------------------------------------------------;
  23. PUSH DS ;в стек
  24. SUB AX,AX ;обнуляем AX
  25. PUSH AX ;AX в стек
  26. MOV AX, DATASG ;DATASG в AX
  27. MOV DS, AX ;AX В DS
  28. LEA BX, MYTEXT ;вывод MYTEXE в BX
  29. MOV CX, 20H ;20H в CX резервируем память в CX
  30. ;-----------------------------------------------------------------------------------;
  31. LEA DX,VAR ;вывод варианта
  32. MOV AH, 09H ;вывод на экран
  33. INT 21H ;прерывание 21H
  34. ;-----------------------------------------------------------------------------------;
  35. LEA DX,VARR ;вывод VARR
  36. MOV AH, 09H ;вывод на экран
  37. INT 21H ;прерывание 21H
  38. LEA DX,TEXTT ;вывод TEXTT
  39. MOV AH, 09H ;вывод на экран
  40. INT 21H ;прерывание 21H
  41. LEA DX,VAR_1 ;вывод VAR_1
  42. MOV AH, 09H ;вывод на экран
  43. INT 21H ;прерывание 21H
  44. ;-----------------------------------------------------------------------------------;
  45. MT1: MOV AH, [BX] ;BX т.е текст MYTEXT В AH побайтно
  46. CMP AH, byte ptr '/' ;сравнение AH с /
  47. JB MT2 ;переход
  48. CMP AH, byte ptr '/' ;сравнение AH c /
  49. JA MT2 ;переход
  50. CALL COR ;вызов проседуры COR
  51. MT2: INC BX ;увеличиваем BX на 1
  52. LOOP MT1 ;цикл со счетчиком если 1 то на метку MT1 иначе дальше
  53. LEA DX, MYTEXT ;вывод MYTEXE
  54. MOV AH, 09H ;вывод на экран
  55. INT 21H ;прерывание 21H
  56. JMP WERT ;безусловный переход на WERT
  57. ;----------------------------------------------------------------------------;
  58. RET ;выход из проседуры
  59. BEGIN ENDP ;конец процедуры
  60. COR PROC NEAR ;процедура COR
  61. NOP ;нет операции
  62. ;ADD AH,byte ptr '\' ;преобразовать '/' в '\'
  63. AND AH, 0DFH;0DFH ;логическое умножение
  64. MOV [BX], AH ;AH в BX
  65. RET ;выход из процедуры
  66. COR ENDP
  67. ;----------------------------------------------------------------------------;
  68. ;----------------------------------------------------------------------------;
  69. WERT:
  70. BEGINN PROC FAR
  71. PUSH DS ;в стек
  72. SUB AX,AX ;обнуляем AX
  73. PUSH AX ;AX в стек
  74. MOV AX, DATASG ;DATASG в AX
  75. MOV DS, AX ;AX В DS
  76. LEA BX, MYTEXT ;вывод MYTEXE в BX
  77. MOV CX, 20H ;10H в CX резервируем память в CX
  78. ;-----------------------------------------------------------------------------------;
  79. LEA DX,VAR_2 ;вывод VAR_2
  80. MOV AH, 09H ;вывод на экран
  81. INT 21H ;прерывание 21H
  82. ;-----------------------------------------------------------------------------------;
  83. MTT1: MOV AH, [BX] ;BX т.е текст MYTEXT В AH побайтно
  84. CMP AH, 41H;61H ;сравнение AH с A-большой англиское
  85. JB MTT2 ;переход по сравнению
  86. CMP AH, 5AH;7AH ;сравнение AH c Z-большой англиское
  87. JA MTT2 ;переход по сравнению
  88. CALL CORR ;вызов проседуры CORR
  89. MTT2: INC BX ;безусловный переход на BX
  90. LOOP MTT1 ;цикл со счетчиком если 1 то на метку MT1 иначе дальше
  91. LEA DX, MYTEXT ;вывод MYTEXE
  92. MOV AH, 09H ;вывод на экран
  93. INT 21H ;прерывание 21H
  94. JMP TREW
  95. ;----------------------------------------------------------------------------;
  96. RET ;
  97. BEGINN ENDP ;
  98. CORR PROC NEAR ;
  99. NOP ;
  100. ADD AH,20H ;
  101. ;AND AH, 0DFH;0DFH ;
  102. MOV [BX], AH ;
  103. RET ;
  104. CORR ENDP
  105. ;-------------------------------------------------------------
  106. TREW:
  107. mov ax,00h
  108. int 16h ;
  109. ;-------------------------------------------------------------
  110. MOV AX,4C00H ;
  111. INT 21H ;
  112. CODESG ENDS
  113. END BEGIN

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

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

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

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

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы