Как заменить первый и последний символ слова скобками? - Assembler

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

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

Ребят как сделать так чтобы из моей фразы: Our Native ZzZzZz получилось : (u) (ativ) (zzzz) т.е в каждом слове первый и последний символ заменить на '(' и ')' . первым заданием было заменить заглавные буквы на строчные
DATASG    SEGMENT   PARA
MYTEXT   DB     'Our Native ZzZzZz' ,13,10, '$'
DATASG  ENDS
 
STACKSG     SEGMENT      'Stack'        
        DB      12 DUP(?)
STACKSG   ENDS
 
CODESG  SEGMENT PARA 'Code'
BEGIN   PROC FAR
ASSUME SS:STACKSG, CS:CODESG,  DS: DATASG
    PUSH    DS
    SUB     AX,AX
    PUSH    AX
    MOV     AX, DATASG
    MOV     DS, AX
    LEA     BX, MYTEXT
    MOV     CX, 10H
MT1:    MOV     AH, [BX]
        CMP     AH, 41H
    JB  MT2
        CMP     AH, 5AH
    JA  MT2
    CALL    COR
 
MT2:    INC     BX
    LOOP MT1
    LEA     DX, MYTEXT
    MOV     AH, 09H
    INT     21H
    RET
BEGIN   ENDP
 
COR PROC     NEAR
    NOP
        ADD     AH, 20H
    MOV     [BX], AH
    RET
COR ENDP
 
CHANGE  PROC NEAR
        NOP
        MOV     AH, 01h
        MOV [BX], AH
        RET
CHANGE  ENDP
CODESG  ENDS
END BEGIN

Решение задачи: «Как заменить первый и последний символ слова скобками?»

textual
Листинг программы
DATASG SEGMENT PARA
MYTEXT  DB  'Our Native ZzZzZz',13,10,'$'
szmyText    equ $-MyText
DATASG  ENDS
 
STACKSG SEGMENT Stack 'Stack'   
    DB 120 DUP(?)
STACKSG ENDS
 
CODESG  SEGMENT PARA 'Code'
BEGIN   PROC FAR
ASSUME SS:STACKSG, CS:CODESG, DS: DATASG
    PUSH    DS
    SUB AX,AX
    PUSH    AX
    MOV AX,DATASG
    MOV DS,AX
    xor dx,dx
    LEA BX,MYTEXT
    MOV CX,szMyText
mt1:    MOV Al,[BX]
    CMP Al,'A'
    JB  mt2
    cmp al,'Z'
    jbe mt3
    CMP al,'a'
    jb  mt2
    cmp al,'z'
    ja  mt2
mt3:    inc dx
    cmp dx,1
    jnz mt4
    mov byte ptr[bx],'('
    jmp short mt4
MT2:    or  dx,dx
    jz  mt4
    xor dx,dx
    mov byte ptr[bx-1],')'
mt4:    INC BX
    LOOP    mt1
    LEA DX,MYTEXT
    MOV AH,09H
    INT 21H
    RET
BEGIN ENDP
CODESG  ends
END BEGIN

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

Этот код на языке Assembler выполняет следующую задачу: заменяет первый и последний символ в слове скобками. Список действий:

  1. Сохраняет сегмент данных в стеке.
  2. Очищает регистр AX.
  3. Перемещает сегмент данных в регистр AX.
  4. Перемещает регистр DS в регистр AX.
  5. Очищает регистр DX.
  6. Перемещает указатель на начало строки в регистр BX.
  7. Перемещает размер строки в регистр CX.
  8. Начинает цикл по всем символам строки.
  9. Если текущий символ является 'A', 'Z', 'a' или 'z', увеличивает счетчик символов и продолжает цикл.
  10. Если текущий символ является ' ' (пробел), переходит к следующему символу.
  11. Если текущий символ является конечным символом строки, переходит к следующему символу.
  12. Если текущий символ является первым символом строки, добавляет символ '('.
  13. Если текущий символ является последним символом строки, добавляет символ ')'.
  14. Увеличивает указатель на следующий символ.
  15. Проверяет, достигнут ли конец строки.
  16. Если достигнут, выводит строку на экран.
  17. Возвращает управление.

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

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